让我们说一个表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,我该怎么做?
答案 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表,而不是整个结果集。