选择相等且不相等的位置

时间:2014-03-20 02:36:53

标签: mysql sql

我有一个名为 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

知道为什么吗?

2 个答案:

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

http://sqlfiddle.com/#!2/2549ce/7

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