首次LEFT JOIN是否适用于多个JOIN?

时间:2012-01-10 15:41:51

标签: mysql sql join left-join

我有<{p>形式的多个JOIN

SELECT * FROM column1
  LEFT JOIN column2 USING(id)
  JOIN column3 USING(name)
  JOIN column4 USING(info)
  WHERE column1.id = 44

如果将LEFT JOIN更改为JOIN;由于显而易见的原因,在没有column2.id的情况下,查询将不返回任何内容。主要数据是第1列,其他数据是支持数据;因此,我想在column1.id存在的情况下检索数据。

我的问题是:第一个LEFT JOIN是否保证查询返回column1.id存在的column1值,而不管后续JOIN s(例如,当column3.name不存在时)?或者我需要将下一个(所有)JOIN更改为LEFT JOIN吗?

3 个答案:

答案 0 :(得分:2)

您有几个选项,因为您的问题的直接答案是no

将所有后续连接更改为LEFT JOIN。

SELECT * FROM column1
  LEFT JOIN column2 USING(id)
  LEFT JOIN column3 USING(name)
  LEFT JOIN column4 USING(info)
  WHERE column1.id = 44

如果可能,请重新安排查询...

SELECT * FROM column1
  JOIN column3 USING(name)
  JOIN column4 USING(info)
  LEFT JOIN column2 USING(id)
  WHERE column1.id = 44

或者...

SELECT * FROM column1
  JOIN
  (
       column3
  JOIN column4 USING(info)
  LEFT JOIN column2 USING(id)
  )
    USING(name)
  WHERE column1.id = 44


另外,我会避免使用自然连接和USING语法。逻辑不太透明,对bug有更多的开放性,以后更容易打破(如果你在其中一个表中添加一个复制USING选项中的字段的表)等等。

答案 1 :(得分:1)

他们“连在一起”,所以他们都应该保持联接。

答案 2 :(得分:0)

您需要left s。

每个JOIN都会尝试将以前连接的结果连接到下一个表格。

你可以这样认为:

  ((column1
    LEFT JOIN column2 USING(id)
    )
  JOIN column3 USING(name)
  )
  JOIN column4 USING(info)
  WHERE column1.id = 44