例如:从T中选择*,其中T.id IN(4,78,12,45)
我希望返回的记录集按“IN”子句中的位置排序。 我怎么能这样做?
答案 0 :(得分:20)
您可以使用FIND_IN_SET,例如
SELECT * FROM T WHERE T.id IN(4,78,12,45)
ORDER BY FIND_IN_SET(T.id,'4,78,12,45');
虽然您必须复制列表,但如果您在代码中生成查询,则这不是一个大问题。
答案 1 :(得分:1)
在一般情况下,你不能。 SQL不保证顺序,除非您使用ORDER BY
子句,并且它不能绑定到IN
语句的内容。
但是,如果您可以构建一个临时表来对您选择的值进行排序,则可以加入该表并按顺序排序。
例如,您有一个包含以下内容的临时表:
id | order
----+------
4 | 1
78 | 2
12 | 3
45 | 4
然后你可以点这样订购:
SELECT T.*
FROM T
INNER JOIN temp
ON T.id = temp.id
ORDER BY temp.order ASC
答案 2 :(得分:0)
您不能通过IN子句订购。您必须提供单独的ORDER BY子句。通过在ORDER BY中构建case语句,可以采用以下方法。但它并不漂亮。
SELECT
*
FROM
T
WHERE
T.Id IN(4, 78, 12, 45)
ORDER BY
CASE
WHEN T.Id = 4 THEN 1
WHEN T.Id = 78 THEN 2
WHEN T.Id = 12 THEN 3
WHEN T.Id = 45 THEN 4
END