我的目标DBMS是Oracle和MySQL
SELECT
users.*
, hr_orders.position_label
, hr_orders.is_boss
, deps.label AS dep_label -- preprocessor removes AS when using Oracle
, users.id IN (?) AS show_on_top -- Oracle doesn't accept this IN thing
FROM
-- some joins here
WHERE
-- some filters
是否可以提供与此查询等效的跨DBMS?
更新
好吧,它破坏了逻辑,我面前的那个人总是希望显示一些用户,
WHERE
users.fake = 0
AND (
users.id IN (?)
OR
-- some more detailed filters
)
ORDER BY
IF (users.id IN (?), 1, 2), users.label
在哪里?是指顶级用户的参数。
此show_on_top字段需要稍后突出显示最佳记录。
因此,如果我将IN移至where子句,则只会选择显示在顶部的用户,而不是其他用户。
将查询拆分为两个并在代码中组合用户列表仍然看起来很难看。
答案 0 :(得分:1)
这应该有效:
WHERE users.id IN (?) AND
-- some filters
答案 1 :(得分:1)
您应该将IN放入WHERE子句
SELECT
users.*
, hr_orders.position_label
, hr_orders.is_boss
, deps.label AS dep_label
, users.id AS show_on_top
FROM
-- some joins here
WHERE
-- some filters
AND users.id IN (?,?,?)
答案 2 :(得分:0)
在我看来,这个查询也不适用于mysql。您只能在查询的“WHERE”部分使用“IN”。在您的示例中,它位于字段列表中。你能在没有评论的情况下提供完整的查询吗?
答案 3 :(得分:0)
如果您希望这些行位于顶部,而不仅仅是这些行,您只需将它们放在ORDER BY中,而不是放在WHERE中(或在SELECT中)。
不知道这是否适用于MySQL,但它应该适用于Oracle
ORDER BY
CASE WHEN users.id IN (?) then 1 else 2 end, users.label