,我想保留保留的顺序进行查询时
SELECT a FROM TABLE WHERE id in (2,45, 87, 10,12, 41, 29)
现在我想接着是在随后是45的顺序我指的是2的一个值的顺序我有这个疑问87.我怎样才能做到这一点在SQL
,我想保留保留的顺序进行查询时
SELECT a FROM TABLE WHERE id in (2,45, 87, 10,12, 41, 29)
现在我想接着是在随后是45的顺序我指的是2的一个值的顺序我有这个疑问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)
在不支持字段,你可以使用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
是的,这是一种可能性,但在我的情况下,ids是由另一个查询,如SELECT ID FROM TABLE 2 WHERE条件生成的。那么我怎么能包括这个以及 – user9093 2012-04-22 10:40:51
@ user9093:在你的情况下,ID不会以任何特定的顺序进来。如果您有特定的订单(例如插入日期),您可以使用JOIN并通过appopriate列进行订购。但看起来你没有这个,所以除非你添加缺失的列,否则你可以做任何事情。 – 2012-04-22 11:05:50
如果您的id值来自另一个查询,并且它们的顺序很重要,那么该查询必须具有自己的ORDER BY子句,以正确的顺序生成该id。然后,您可以使用连接而不是IN子句,并使用此ORDER BY子句。这是一个标准的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而不是NULL,结果应该是您想要的。
您使用的是哪个数据库? – JohnFx 2012-04-22 07:40:41