在sql自连接中根据某个条件获取一行

时间:2014-03-04 21:34:14

标签: mysql sql self-join

对于下表,是否可以使用自联接获得结果?

表:

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。

我正在尝试使用当前的表结构来提高性能。 但据我所知,桌子也可能没有精心设计。

2 个答案:

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