我不是SQL专家,但我不是一个完全的业余爱好者,但这是一个包含2个字段的单个表的查询,我不知道如何处理。
假设你有一个表#&类的表学生#。你如何找到只有学生x,y和amp; Z'
我真正的问题更像是目录和表格。项目编号,以及如何查找具有(或多或少)指定项目的所有目录。
我唯一的想法是围绕GROUP_CONCAT的匹配,但必须有一个更优雅的方式......
编辑: 我错了问题,所以我也会提供表格结构。问题更像是盒子中的产品,其中一个盒子可能包含多个特定产品,并且您希望找到具有完全指定内容的盒子。因此,例如,表格是:
+------------+------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+------------+------+-----+---------+----------------+
| id | bigint(20) | NO | PRI | NULL | auto_increment |
| box_id | bigint(20) | YES | | NULL | |
| product_id | bigint(20) | YES | MUL | NULL | |
+------------+------------+------+-----+---------+----------------+
我想找到所有包含2项产品ID 22,17项中的一项和55项中的一项的所有方框。不多也不少。
答案 0 :(得分:2)
您可以使用having
子句:
select *
from YourTable
group by
class
having count(distinct student) = 3
and max(case when student = 'X' then 1 end) = 1
and max(case when student = 'Y' then 1 end) = 1
and max(case when student = 'Z' then 1 end) = 1
答案 1 :(得分:0)
我确实有一个有效的答案,但它远没有效率或优雅,所以我把它呈现给任何寻找这个问题的次优但正确解决方案的人,并诱使其他人提供更好的解决方案
SELECT box_id, GROUP_CONCAT( product_id
ORDER BY product_id DESC
SEPARATOR ',' ) AS contents
FROM box_product
GROUP BY box_id
HAVING contents = '17,22,22,55';