左边加入常规联接和结果

时间:2015-07-29 15:29:11

标签: sql postgresql

左连接问题。我试图LEFT JOIN一个表,需要在初始左连接表上连接其他表。所以..

SELECT * FROM tableA 
LEFT JOIN tableB 
  ON tableB.id=tableA.id 
JOIN tableC 
  ON tableC.id=tableB.id

问题是如果我没有离开联接表C我没有得到任何结果,如果离开加入我得到太多结果。

我应该使用哪种连接,如果tableB join为null,tableC连接也将为null?

3 个答案:

答案 0 :(得分:1)

  

我没有离开加入表C我没有得到任何结果,如果离开加入我得到   结果太多了

您需要确定您的驾驶表和数据是什么。在这种情况下,似乎表A是驱动表,从B到C的连接也可以是左连接,这意味着即使B中不存在匹配,也可以返回来自C的数据。

SELECT * FROM tableA 
LEFT JOIN tableB 
  ON tableB.id=tableA.id 
LEFT JOIN tableC 
  ON tableC.id=tableB.id
  

如果离开加入,我会得到太多结果

你能发布一些样本数据来表明你的意思吗?

答案 1 :(得分:1)

子查询怎么样?

SELECT * FROM tableA 
LEFT JOIN (SELECT tableB.id FROM tableB
  JOIN tableC 
    ON tableC.id=tableB.id) tableZ
  ON tableZ.id=tableA.id

答案 2 :(得分:0)

我想你可能想要这个逻辑:

SELECT *
FROM tableA LEFT JOIN
     (tableB JOIN
      tableC
      ON tableC.id = tableB.id
     )
     ON tableB.id = tableA.id ;

通常,LEFT JOIN想要链接它们,但也有一些例外。