找到那些有类型a而不是b的人。使用减去等价物

时间:2018-02-06 23:56:44

标签: mysql

让我们说一个表Person,我的关系如下:

人:(人,类型)

只有两种类型:a或b 人可以有多种类型

问题:找到那些有a型但不是b。

的人

例如:

Person   type
mary     a
mary     b
steve    a
bob      a

我想要这个

Person
steve
bob

我的尝试:

SELECT person FROM Person
    where type = 'a'

MINUS

SELECT person FROM Person
    where type = 'b'

MYSQL不支持MINUS或EXCEPT。我正在寻找的替代品继续给我一个错误。如果没有MINUS或EXCEPT,我该怎么做?

1 个答案:

答案 0 :(得分:0)

有很多方法可以达到预期的效果。

您可以使用not exists运算符(或使用not in代替):

SELECT person FROM Person
where type = 'a'
    and not exists (select 1 from Person p2 where p2.type<>'a' and p2.person=Person.person)

您也可以通过自我加入来实现:

SELECT p1.person FROM Person p1
LEFT JOIN Person p2 on p1.person=p2.person and p2.type<>'a'
where p1.type = 'a' and p2.person is null

p2.type<>'a'条件放入连接条件非常重要,这样它只适用于p2表,而不是整个结果集。