2011-08-21 576 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