使用in语句

时间:2019-03-15 08:47:35

标签: sql-server database sorting where-in

我对sql数据库非常陌生,我有以下问题

我需要在组件表中搜索ID匹配ID列表的所有组件(请参见示例)。

组件表

ID      Name   
1       component 1
...     ...
10      component 10

ID列表=(1,8,3)

query for this: 
SELECT * FROM Component
WHERE ID IN (1,8,3)

这将给我ID 1,3和8,这是正确的,但是顺序不同。 有没有办法保持列表的顺序(1,8,3而不是1,3,8)呢?

提供查询的链接:SQL Statement using Where clause with multiple values

预先感谢, 西奥

1 个答案:

答案 0 :(得分:2)

您可以使用CASE表达式进行订购:

SELECT *
FROM Component
WHERE ID IN (1,8,3)
ORDER BY
    CASE WHEN ID = 1 THEN 1
         WHEN ID = 8 THEN 2
         ELSE 3 END;

但是更好的长期解决方案可能是维护目标ID值及其顺序的单独表:

WITH cte AS (
    SELECT 1 AS ID, 1 AS position UNION ALL
    SELECT 8, 2 UNION ALL
    SELECT 3, 3
)

SELECT c.*
FROM Component c
INNER JOIN cte t
    ON c.ID = t.ID
WHERE c.ID IN (1,8,3)
ORDER BY t.position;