SQL Где предложение
У моего приложения изначально был запрос, похожий на этот:-
SELECT column_name from PERSON
WHERE name in (list);
где список - это список через запятую.
Но теперь требование изменилось, и мне нужно запросить таблицу Persons с указанием имени и возраста. У меня есть имя AgeList.
Первоначально я думал, что запрос, подобный этому, будет работать (Создать nameList и ageList из nameAgeList)
SELECT column_name from Person
WHERE name in (nameList)
AND age in (ageList)
Но после тщательного обдумывания это кажется неправильным запросом.
Пожалуйста, дайте мне знать, как мне продолжить этот запрос.
3 ответа
Под Oracle вы можете сделать это:
SELECT * FROM Person
WHERE
(name, age) IN (
('name1', age1),
('name2', age2)
-- Etc...
)
В этом списке может быть до 1000 кортежей.
Один из вариантов - создать временную таблицу (или, если SQL Server, переменную таблицы), поместить свои имена и возраст в эту таблицу, а затем просто присоединиться к ней:
SELECT column_name from Person p
INNER JOIN myTempTable t ON t.Name = p.Name AND t.age = p.age
Это не красиво, и это работает только тогда, когда вы можете сгенерировать свое заявление в коде:
SELECT column from Person
WHERE 1=1
AND ( ( name = name1 and age = age1 )
OR ( name = name2 and age = age2 )
OR ( name = name3 and age = age3 )
OR ( name = name4 and age = age4 )
OR ( name = name5 and age = age5 )
... et cetera
)
Теперь, если бы вы могли поместить эти списки в таблицы, вы могли бы сделать намного лучше, чем это. Есть ли способ вы можете получить эти списки в базу данных? Я предполагаю, что вам действительно нужна таблица Person, в которой указаны имя и возраст каждого человека.