对于下表,是否可以使用自联接获得结果?
表:
id pId type
-------------
1 1000 1
2 1001 1
3 1002 1
4 1000 3
预期结果:
id pId type
-------------
2 1001 1
3 1002 1
换句话说,我想要所有类型为1但没有类型3的行。
提前谢谢。
更新
这是性能测试环境中的一个问题。 换句话说,有很多行,如1000和1001,1002。
我正在尝试使用当前的表结构来提高性能。 但据我所知,桌子也可能没有精心设计。
答案 0 :(得分:2)
你不需要任何联接 - 只需要一个子选择 - 就像这样:
select * from mytable t1
where not exists (select id from mytable t2 where t1.pid=t2.pid and type=3)
答案 1 :(得分:0)
如果您想使用自我加入,可以使用此查询:
SELECT t1.id, t1.pId, t1.type
FROM
tablename t1 LEFT JOIN tablename t2
ON t1.pid = t2.pid AND t2.type=3
WHERE
t1.type=1 AND
t2.type IS NULL
请参阅小提琴here。