SQL Где предложение - PullRequest
       10

SQL Где предложение

0 голосов
/ 21 августа 2011

У моего приложения изначально был запрос, подобный следующему: -

SELECT column_name from PERSON
WHERE name in (list);

, где список - список, разделенный запятыми.

Но теперь требование изменилось, и мне нужно запроситьТаблица персон с указанием имени и возраста.У меня есть nameAgeList.

Первоначально я думал, что запрос, подобный этому, будет работать (Создать nameList и ageList из nameAgeList)

SELECT column_name from Person 
WHERE name in (nameList) 
AND age in (ageList)

Но после тщательного размышления это кажется неправильнымзапрос.

Пожалуйста, дайте мне знать, как мне продолжить этот запрос.

Ответы [ 3 ]

5 голосов
/ 21 августа 2011

В Oracle вы можете сделать это:

SELECT * FROM Person
WHERE
    (name, age) IN (
        ('name1', age1),
        ('name2', age2)
        -- Etc...
    )

В этом списке может быть до 1000 кортежей.

2 голосов
/ 21 августа 2011

Один из вариантов - создать временную таблицу (или, если SQL Server, переменную таблицы), указать свои имена и возраст в этой таблице, а затем просто присоединиться к ней:

SELECT column_name from Person p
INNER JOIN myTempTable t ON t.Name = p.Name AND t.age = p.age
0 голосов
/ 21 августа 2011

Это не красиво, и это работает только тогда, когда вы можете сгенерировать ваш оператор в коде:

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

...