我有一个名为 group 的表(n:m),如下所示:
group_id type
-------------------------
53 7
152 7
301 7
.... ...
53 12
编辑:
我想选择组中包含 7 类型的所有行,但是,如果该组包含类型12,我想将其排除
输出应为:
group_id type
-------------------------
152 7
301 7
我已经创建了一个查询
SELECT *
FROM group AS g
WHERE g.type= 7 AND g.type!= 12
但是,我正在
group_id type
-------------------------
53 7
152 7
301 7
知道为什么吗?
答案 0 :(得分:6)
有几种方法可以做到这一点。一种方法是执行LEFT JOIN
加入表格的两个实例,将一边限制为type = 7
,将另一边限制为type = 12
,并在{{}}范围内查找不匹配1}}。
type = 12
以下是演示:http://sqlfiddle.com/#!2/2549ce/2
也可以使用SELECT
g1.*
FROM
`group` g1
LEFT JOIN `group` g2 ON g1.group_id = g2.group_id AND g2.type = 12
WHERE
g1.type = 7
/* NULL means no match in the 12's */
AND g2.group_id IS NULL
将子查询与外部NOT EXISTS
相关联。
group_id
答案 1 :(得分:5)
有几种方法可以做到这一点NOT IN是一个
SELECT *
FROM group AS g
WHERE g.type= 7
and group_id not in (select group_id from group where g.type = 12)