,我想保留保留的順序進行查詢時
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