找一个具有特定学生的课程

时间:2012-06-30 15:31:39

标签: mysql sql

我不是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项中的一项的所有方框。不多也不少。

2 个答案:

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