在一个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