Поисковый запрос SQL с несколькими значениями, использующий оператор in - PullRequest
1 голос
/ 15 марта 2019

Я очень новичок в базах данных sql и у меня следующий вопрос

Мне нужно найти в таблице компонентов все компоненты, идентификаторы которых соответствуют списку идентификаторов (см. Пример).

Таблица компонентов

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

Список идентификаторов = (1,8,3)

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

Это даст мнеИдентификаторы 1,3 и 8, это правильно, но в другом порядке.Есть ли способ сохранить порядок, подобный порядку списка (1,8,3 вместо 1,3,8)?

ссылка, предоставившая запрос: Оператор SQL с использованием предложения Whereс несколькими значениями

Заранее спасибо, Тео

1 Ответ

2 голосов
/ 15 марта 2019

Вы можете заказать, используя выражение 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;
...