如何在 SQL 中使用多个 LEFT JOIN?

Posted

技术标签:

【中文标题】如何在 SQL 中使用多个 LEFT JOIN?【英文标题】:How to use multiple LEFT JOINs in SQL? 【发布时间】:2011-06-24 10:21:57 【问题描述】:

sql查询中是否可以使用多个左连接?

    LEFT JOIN
        ab 
    ON
        ab.sht = cd.sht

我想添加一个这样的查询吗? 会有用吗?

    LEFT JOIN
        ab AND aa
    ON
        ab.sht = cd.sht
           AND
        aa.sht = cc.sht

这行得通吗?

【问题讨论】:

【参考方案1】:

是的,这是可能的。每个连接表都需要一个 ON。

LEFT JOIN ab
  ON ab.sht = cd.sht
LEFT JOIN aa
  ON aa.sht = cd.sht

顺便说一下,http://bentilly.blogspot.com/2011/02/sql-formatting-style.html 中描述了我对复杂 SQL 的个人格式偏好。如果你要写很多这样的东西,它可能会有所帮助。

【讨论】:

【参考方案2】:

是的,但是语法和你的不一样

SELECT
    <fields>
FROM
    <table1>
    LEFT JOIN <table2>
        ON <criteria for join>
        AND <other criteria for join>
    LEFT JOIN <table3> 
        ON <criteria for join>
        AND <other criteria for join>

【讨论】:

感谢您在 JOIN 上显示 AND 标准。我将一些搜索词错误地移动到 WHERE 子句中,这让我大吃一惊! 应该选择最佳答案。【参考方案3】:

所需的 SQL 将类似于:-

SELECT * FROM cd
LEFT JOIN ab ON ab.sht = cd.sht
LEFT JOIN aa ON aa.sht = cd.sht
....

希望对你有帮助。

【讨论】:

以这种格式查看 LEFT JOIN 的,一个接一个真的是看透了。【参考方案4】:

您有两种选择,具体取决于您的餐桌顺序

create table aa (sht int)
create table cc (sht int)
create table cd (sht int)
create table ab (sht int)

-- type 1    
select * from cd
inner join cc on cd.sht = cc.sht
LEFT JOIN ab ON ab.sht = cd.sht
LEFT JOIN aa ON aa.sht = cc.sht

-- type 2
select * from cc
inner join cc on cd.sht = cc.sht
LEFT JOIN ab
LEFT JOIN aa
ON aa.sht = ab.sht
ON ab.sht = cd.sht

【讨论】:

以上是关于如何在 SQL 中使用多个 LEFT JOIN?的主要内容,如果未能解决你的问题,请参考以下文章

sql中left join from 多个表怎么写

sql 使用left join后,选取其中两列,进行字段连接,但是出现了null,如何处理?多谢!

sql中left join on 多个条件需要特殊注意之处

SQL 如何使用 LEFT JOIN 从表中选择单个值,在 Google Datastudio 中

多个left join结合动态sql的代码语句

多个left join结合动态sql的代码语句