【问题标题】:SQL search query with multiple values using in statement使用 in 语句的具有多个值的 SQL 搜索查询
【发布时间】:2019-03-15 08:47:34
【问题描述】:

我对 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

提前致谢, 西奥

【问题讨论】:

  • SQL 结果没有隐式顺序。这适用于 所有 数据库,而不仅仅是 SQL Server。除非您使用ORDER BY 子句,否则服务器将在生成结果时返回结果。
  • 为什么要按那个顺序返回结果?这背后有什么逻辑吗?

标签: sql-server database sorting where-in


【解决方案1】:

您可以使用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;

【讨论】:

    猜你喜欢
    • 2017-10-31
    • 1970-01-01
    • 1970-01-01
    • 2019-12-29
    • 2017-06-12
    • 2022-06-10
    • 1970-01-01
    • 2013-11-14
    • 2020-01-06
    相关资源
    最近更新 更多