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

标签 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

提前致谢, 西奥

最佳答案

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

关于sql-server - 使用 in 语句的具有多个值的 SQL 搜索查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55178674/

相关文章:

sql-server - 如何在azure数据仓库中实现string_agg函数

sql - 选择时如何忽略某些相似的行

sql-server - SQL Server 2019 安装microsoft odbc driver 17 下载错误

mysql - 有效地重新索引庞大的数据库(英文维基百科)

javascript - 如何对 Ul 和 Li div 数据进行排序

sql-server - 由于区域设置,将字符串转换为日期时间时出错

php - PHP MYSQL覆盖最后一个连接链接

php - 如何插入 MySQL 数据库并在 PHP PDO 中返回其 id?

python - 基于多个条件对多维数组进行排序的算法

c# - 将字符串拆分为数组并对数组进行排序