0

我的应用程序最初有一个类似于此的查询:-

SELECT column_name from PERSON
WHERE name in (list);

其中 list 是逗号分隔的列表。

但是,现在要求已经改变,我必须查询 Persons 表并给出姓名和年龄。我有 nameAgeList。

最初,我认为与此类似的查询会起作用(从 nameAgeList 创建 nameList 和 ageList)

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

但仔细思考后,这似乎是一个错误的查询。

请让我知道我应该如何继续进行此查询。

4

3 回答 3

5

在 Oracle 下,您可以这样做:

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

此列表中最多可以有 1000 个元组。

于 2011-08-21T02:44:22.833 回答
2

一种选择是创建一个临时表(或者如果是 SQL Server,则为表变量),将您的姓名和年龄放在此表中,然后简单地加入它:

SELECT column_name from Person p
INNER JOIN myTempTable t ON t.Name = p.Name AND t.age = p.age
于 2011-08-21T01:58:51.523 回答
0

它并不漂亮,而且只有当您可以在代码中生成语句时才有效:

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 表。

于 2011-08-21T01:26:30.130 回答