2011-08-21 139 views
0

我的应用程序最初有类似这样的查询: -SQL Where子句

SELECT column_name from PERSON 
WHERE name in (list); 

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

但是,现在需求已经改变,我必须查询名称和年龄给定的人表。 我有nameAgeList。

起初,我认为类似这样的工作查询(从nameAgeList创建名称列表和ageList)

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

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

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

+5

什么是'nameAgeList'?为什么这是“错误的查询”?它会产生不正确的结果吗?你有错误吗?你的服务器爆炸了吗? –

+0

这可能是功课还是一些这样的?你使用的是哪个数据库,还是只允许标准的sql? – jswolf19

+0

1)什么平台? 2)'nameAgeList'是什么形式? 3)如果它是一个字符串,为什么? 4)名称是否与年龄有关? – Aaronaught

回答

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表,其中包含每个人的姓名和年龄。

+1

是的,这太可怕了,不要这样做! –

+0

对于作业这是好事,我会说 – Martin

2

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

SELECT column_name from Person p 
INNER JOIN myTempTable t ON t.Name = p.Name AND t.age = p.age 
5

在Oracle中,可以这样做:

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

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

+0

为1000的限制+1^_ ^ – jswolf19