Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 使用in语句的具有多个值的SQL搜索查询_Sql Server_Database_Sorting_Where In - Fatal编程技术网

Sql server 使用in语句的具有多个值的SQL搜索查询

Sql server 使用in语句的具有多个值的SQL搜索查询,sql-server,database,sorting,where-in,Sql Server,Database,Sorting,Where In,我对sql数据库非常陌生,我有以下问题 我需要在component表中搜索ID与ID列表匹配的所有组件(参见示例) 组件表 ID Name 1 component 1 ... ... 10 component 10 ID列表=(1,8,3) 这将给我ID 1、3和8,这是正确的,但顺序不同。 有没有办法保持列表的顺序(1,8,3而不是1,3,8) 提供查询的链接: 提前感谢,, o您可以使用案例表达式进行订购: SELECT * FROM Comp

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

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

组件表

ID      Name   
1       component 1
...     ...
10      component 10
ID列表=(1,8,3)

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

提供查询的链接:

提前感谢,,
o

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

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;

SQL结果没有隐式顺序。这适用于所有数据库,而不仅仅是SQL Server。除非使用
ORDER BY
子句,否则服务器将在生成结果时返回结果。为什么要按该顺序返回结果?这背后有什么逻辑吗?
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;