使用 max() 实现 havingRaw() 时出错
Error when implementing havingRaw() with max()
我正在尝试将这个 SQL 查询翻译成 knex:
select
"events".*,
"events"."id",
"events"."version",
"events"."reviewed_at",
"events"."source_id"
from "events"
inner join "events" as "events2" on "events".source_id = "events2".source_id
inner join "event_dates" on "events"."id" = "event_dates"."event_id"
where "event_dates"."end_date" > 'NOW()'
group by
"events"."id",
"events"."version",
"events"."reviewed_at",
"events"."source_id"
having MAX("events2".reviewed_at) = "events".reviewed_at;
但我似乎无法正确理解 havingRaw()
部分。这是我目前的 havingRaw()
:
.havingRaw('MAX("events2".reviewed_at) = ?', "events".reviewed_at)
如果我排除havingRaw(..)
,我的查询就会执行,但我确实需要添加 having 条件。
至少你的代码似乎有语法错误,你使用的 raw
API 错误:
.havingRaw('MAX("events2".reviewed_at) = ?', "events".reviewed_at)
您正在尝试读取字符串文字 "event"
的属性 reviewed_at
...尝试:
.havingRaw('MAX(??) = ??', ["events2.reviewed_at", "events.reviewed_at"])
其中 ??
是标识符替换,它会自动正确引用。如果您只使用 ?
替换,knex
会尝试将替换作为值绑定传递给数据库驱动程序。
我正在尝试将这个 SQL 查询翻译成 knex:
select
"events".*,
"events"."id",
"events"."version",
"events"."reviewed_at",
"events"."source_id"
from "events"
inner join "events" as "events2" on "events".source_id = "events2".source_id
inner join "event_dates" on "events"."id" = "event_dates"."event_id"
where "event_dates"."end_date" > 'NOW()'
group by
"events"."id",
"events"."version",
"events"."reviewed_at",
"events"."source_id"
having MAX("events2".reviewed_at) = "events".reviewed_at;
但我似乎无法正确理解 havingRaw()
部分。这是我目前的 havingRaw()
:
.havingRaw('MAX("events2".reviewed_at) = ?', "events".reviewed_at)
如果我排除havingRaw(..)
,我的查询就会执行,但我确实需要添加 having 条件。
至少你的代码似乎有语法错误,你使用的 raw
API 错误:
.havingRaw('MAX("events2".reviewed_at) = ?', "events".reviewed_at)
您正在尝试读取字符串文字 "event"
的属性 reviewed_at
...尝试:
.havingRaw('MAX(??) = ??', ["events2.reviewed_at", "events.reviewed_at"])
其中 ??
是标识符替换,它会自动正确引用。如果您只使用 ?
替换,knex
会尝试将替换作为值绑定传递给数据库驱动程序。