Как получить весь соответствующий текст оператора IN в SQL?
Для ясности, вот сценарий: я выполняю запрос, подобный следующему:
SELECT * FROM table_name WHERE uid IN ( 1, 3, 5, 8, 23, 4, 589 ... )
Список uid
s идет от пользователя.
Есть ли способ получить все соответствующие uid
в списке с помощью SQL?
Я ищу синтаксис Oracle SQL, но я также хочу знать синтаксис для общей системы баз данных.
Благодарю.
ОБНОВИТЬ
Я хочу получить все совпадения uid
s. Например, в таблице нет записи с UID 8
а также 23
, на выходе должно быть 1, 3, 5, 4, 589 ...
2 ответа
Есть ли способ получить все соответствующие идентификаторы в списке, используя SQL?
Да, используйте свой запрос, но просто получите uid
колонка. Если вы не хотите повторений, используйте DISTINCT
ключевое слово:
SELECT DISTINCT uid
FROM table_name
WHERE uid IN ( 1, 3, 5, 8, 23, 4, 589 ... )
Если вы хотите это в списке через запятую:
SELECT LISTAGG( uid, ',' ) WITHIN GROUP ( ORDER BY uid ) AS uids
FROM table_name
WHERE uid IN ( 1, 3, 5, 8, 23, 4, 589 ... )
Я уверен, что правильно понял ваш вопрос. Если вы хотите узнать, учитывая список значений, какие в таблице, а какие нет, вы можете попробовать это; вам нужно ответить на значения, которые вы ищете во временной таблице (или в выражении select union, или что-то в этом роде), а затем выполнить левое соединение со своей таблицей (TX - вот ваша таблица). Этот сценарий предназначен для MSSQL, чтобы дать вам идею. ЭТО ДОЛЖНО БЫТЬ ЛЕГКО ПРЕОБРАЗОВАТЬ ИХ ДЛЯ ORACLE, ЕСЛИ ЭТО РЕШЕНИЕ - ТО, ЧТО ВЫ ПРОСИТЕ (ЭТО НЕ ЯВЛЯЕТСЯ ОТ ВАШЕГО ВОПРОСА).
CREATE TABLE TX (UID INT)
INSERT INTO TX VALUES (1),(5),(4)
CREATE TABLE TEMP1 (ID_VAL INT)
INSERT INTO TEMP1 SELECT 1 UNION ALL SELECT 3 UNION ALL SELECT 5 UNION ALL SELECT 8 UNION ALL SELECT 23 UNION ALL SELECT 4 UNION ALL SELECT 589
SELECT * FROM TEMP1
SELECT *
FROM TEMP1
LEFT JOIN TX ON TEMP1.ID_VAL = TX.UID
Выход:
ID_VAL UID
----------- -----------
1 1
3 NULL
5 5
8 NULL
23 NULL
4 4
589 NULL