在一個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
可能是11
和22
(在這種情況下,它應該只選擇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_number
是11
a第二22
和content_number 11
有content_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
哇!它工作正常! Thx這麼多。我用你的第二個查詢,我可以問什麼(distinct content_number)= 2的含義?如果我搜索3號碼怎麼辦?我應該使用(distinct content_number)= 3嗎? – yves
是的,如果你搜索3個數字,你需要'3'。首先我用那裏的where子句過濾數據。只剩下'content_number's'11'和'22'。然後我使用count(distinct content_number)來計算剩下的content_number的數量。'distinct'用於確保不僅有2次'22',而是'11'和'22'。 –
謝謝。我更新了我的問題,我現在如何在查詢中添加新的標準?用另一個where子句和第二個計數? – yves