我有这个查询,我想保留订单
SELECT a FROM TABLE WHERE id in (2,45, 87, 10,12, 41, 29)
现在我想要按该顺序的a值我的意思是a for 2,然后是a for 45,然后是a for 87。我怎样才能在sql中完成这个
我有这个查询,我想保留订单
SELECT a FROM TABLE WHERE id in (2,45, 87, 10,12, 41, 29)
现在我想要按该顺序的a值我的意思是a for 2,然后是a for 45,然后是a for 87。我怎样才能在sql中完成这个
在 MySQL 中,您可以使用 ORDER BY FIELD:
SELECT a
FROM yourtable
WHERE id IN (2, 45, 87, 10, 12, 41, 29)
ORDER BY FIELD (id, 2, 45, 87, 10, 12, 41, 29)
在不支持 FIELD 的数据库中,您可以改用 CASE 表达式:
SELECT a
FROM yourtable
WHERE id IN (2, 45, 87, 10, 12, 41, 29)
ORDER BY CASE
WHEN id = 2 THEN 1
WHEN id = 45 THEN 2
WHEN id = 87 THEN 3
WHEN id = 10 THEN 4
WHEN id = 12 THEN 5
WHEN id = 41 THEN 6
WHEN id = 29 THEN 7
END
如果您的 id 值来自另一个查询,并且它们的顺序很重要,那么该查询必须有自己的 ORDER BY 子句,以正确的顺序生成 id。然后,您可以在此 ORDER BY 子句中使用联接而不是 IN 子句。这是执行此操作的标准 SQL 查询。
with SelectIDs(id,position) as (
select
id,
row_number() over (
order by columnA, columnB
)
from table2
where <your where condition>
)
select T.*
from yourTable as T
join SelectIDs as I
on I.id = T.id
order by I.position;
如果您匹配的 id 是不同的而不是 NULL,那么结果应该是您想要的。