SQL:如何从多行中选择满足多个条件的单个ID

时间:2013-07-31 15:32:52

标签: mysql sql search select criteria

在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_idcontent_number 11 22content_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

2 个答案:

答案 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