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, в которой указаны имя и возраст каждого человека.

Другие вопросы по тегам