我有这个查询,我想保留订单
SELECT a FROM TABLE WHERE id in (2,45, 87, 10,12, 41, 29)
现在我希望按顺序输入一个值,我的意思是a表示2表示后跟a表示45后跟表示87表示。如何在sql中完成此操作
答案 0 :(得分:5)
在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
答案 1 :(得分:0)
如果您的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,那么结果应该是你想要的。