SQL 使用 in 语句搜索具有多个值的查询
SQL search query with multiple values using in statement
我是 sql 数据库的新手,我有以下问题
我需要在组件 table 中搜索 ID 与 ID 列表匹配的所有组件(参见示例)。
组件table
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)?
提供查询的link:SQL Statement using Where clause with multiple values
提前致谢,
西奥
您可以使用 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;
但更好的长期解决方案可能是维护一个单独的 table 目标 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;
我是 sql 数据库的新手,我有以下问题
我需要在组件 table 中搜索 ID 与 ID 列表匹配的所有组件(参见示例)。
组件table
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)?
提供查询的link:SQL Statement using Where clause with multiple values
提前致谢, 西奥
您可以使用 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;
但更好的长期解决方案可能是维护一个单独的 table 目标 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;