3

在 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

我正在寻找对其进行搜索查询的可能性:

我想选择可能是ANDpackage_id的位置(在这种情况下,它应该只选择content_number11 22package_id 99

我真的不知道在 SQL 中是否可能,因为该语句AND总是会导致错误。如果我使用该语句,OR我也会得到package_id 99, 101, 120, 135,这不是我想要的。

也许我的桌子也设计得不好,但任何建议都会有所帮助!提前致谢

编辑

我添加了content_quality专栏

我使用了 juergen 的 sql 查询,效果很好

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

我的最后一个问题是我现在如何添加另一个标准:选择package_idwhere content_numberis 11 and has22 content_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
4

2 回答 2

4

您需要按 分组,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
于 2013-07-31T15:35:28.583 回答
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

编辑:对于您的第二个问题:只需将其添加到查询中。重命名为的 package_contenta负责 content_number 11。因此您可以问,a 是否具有 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
于 2013-07-31T15:39:05.783 回答