2013-07-31 109 views
1

在一個MySQL數據庫中的單個ID,下面我有SQL:如何選擇滿足多個條件多行

package_content : 

id | package_id | content_number | content_name | content_quality 

1  99   11    Yellow   1 
2  99   22    Red    5 
3  101   11    Yellow   5 
4  101   33    Green   5 
5  101   44    Black   5 
6  120   11    Yellow   5 
7  120   55    White   5 
8  135   66    Pink    5 
9  135   99    Orange   5 
10  135   11    Yellow   5 

表,我期待有可能使上搜索查詢:

我想選擇package_id其中content_number可能是1122(在這種情況下,它應該只選擇package_id 99

我真的不知道它是否可能在SQL中,因爲語句AND將始終導致爲false。如果我使用聲明OR我也得到package_id 99, 101, 120, 135,這不是我想要的。

也許我的桌子設計得不好,但任何建議都會有幫助!提前 感謝

編輯

我加入了content_quality

我使用的SQL查詢從克林斯曼,工作得非常好

select package_id 
from package_content 
where content_number in (11,22) 
group by package_id 
having count(distinct content_number) = 2 

我的最後一個問題是我怎麼能現在添加另一個標準:選擇package_id其中content_number11a第二22content_number 11content_quality 1

編輯2:

對於第二個問題我現在這個查詢使用。感謝你們幫助我的兩位! :)

SELECT * 
FROM (
    SELECT package_id 
    FROM package_content 
    WHERE 
     (content_number=11 AND content_quality > 1) 
     OR (content_number = 33 AND content_quality = 5) 
     OR (content_number = 44 AND content_quality =5 AND content_name like 'Black') 
    GROUP BY package_id 
    HAVING count(DISTINCT content_number) = 3 
    )t1 
LEFT JOIN package_content ON package_content.package_id = t1.package_id 

這將輸出

id | package_id | content_number | content_name | content_quality 

3  101   11    Yellow   5 
4  101   33    Green   5 
5  101   44    Black   5 

回答

2

您需要組由package_id然後用having超過分組數據

select package_id 
from package_content 
where content_number = 22 
or 
(
    content_number = 11 and content_quality = 1 
) 
group by package_id 
having count(distinct content_number) = 2 
+0

哇!它工作正常! Thx這麼多。我用你的第二個查詢,我可以問什麼(distinct content_number)= 2的含義?如果我搜索3號碼怎麼辦?我應該使用(distinct content_number)= 3嗎? – yves

+0

是的,如果你搜索3個數字,你需要'3'。首先我用那裏的where子句過濾數據。只剩下'content_number's'11'和'22'。然後我使用count(distinct content_number)來計算剩下的content_number的數量。'distinct'用於確保不僅有2次'22',而是'11'和'22'。 –

+0

謝謝。我更新了我的問題,我現在如何在查詢中添加新的標準?用另一個where子句和第二個計數? – yves

1

您可以用查詢執行聚合功能一個自我加入:

SELECT DISTINCT package_id 
FROM package_content a, package_content b 
WHERE a.package_id = b.package_id 
     AND a.content_number = 11 AND b.content_number = 22 

編輯:對於第二個問題:只需將其添加到查詢。更名爲a的package_content負責content_number 11.因此你可以問,閹一個具有content_quality 1:

SELECT DISTINCT package_id 
FROM package_content a, package_content b 
WHERE a.package_id = b.package_id 
     AND a.content_number = 11 AND b.content_number = 22 
     AND a.content_quality = 1 
+0

謝謝,工作得很好! – yves

相關問題