在MySQL数据库中,我有下表
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
AND 22
(在这种情况下,它应该只选择{{} 1}}
我真的不知道在SQL中是否可能,因为语句package_id 99
总是会导致错误。如果我使用语句AND
我也会得到OR
,而这不是我想要的。
也许我的桌子也没有很好的设计,但任何建议都会有所帮助! 提前致谢
修改
我添加了package_id 99, 101, 120, 135
列
我使用juergen的sql查询,效果很好
content_quality
我的最后一个问题是我现在如何添加其他条件:选择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
22
有content_number 11
编辑2:
对于第二个问题,我现在使用此查询。感谢帮助我的你们两个! :)
content_quality 1
这将输出
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
答案 0 :(得分:3)
您需要按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
答案 1 :(得分: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