没有on子句的连续连接[重复]

Posted

技术标签:

【中文标题】没有on子句的连续连接[重复]【英文标题】:Consecutive joins without on clause [duplicate] 【发布时间】:2014-09-17 10:38:15 【问题描述】:

我正在查看一个 SQL 存储过程,但在理解连接部分时遇到了问题。谁能在不使用“ON”子句的情况下就这些连接如何工作提供建议?

 FROM
       SQL.TableA A LEFT JOIN SQL.TableB B LEFT JOIN SQL.TableC C 
               ON B.ITEMID = C.ITEMID

【问题讨论】:

什么 DBMS?有不同种类的 SQL。 以这种方式进行连接是有效的,但看起来On B.ItemId = C.ItemId 之后缺少On 子句。你能出示完整的声明吗? 有没有可能SQL.TableA只能是一行? @RBarryYoung 正在寻找的是 sql server、mysql、sqlite、oracle 之类的东西......类似的东西。 您是否尝试在一些测试表上对其进行测试以分析结果?您是否查看了数据库产品的手册以查看没有 ON 子句的 JOIN 的默认行为是什么? 【参考方案1】:

您的查询可以翻译成

FROM
   SQL.TableA A LEFT JOIN 
   SQL.TableB B ON B.ITEMID = C.ITEMID LEFT JOIN
   SQL.TableC C ON B.ITEMID = C.ITEMID

正如你所看到的,这没有多大意义,因为 A 没有加入 我希望是这样的:

FROM
   SQL.TableA A LEFT JOIN 
   SQL.TableB B LEFT JOIN
   SQL.TableC C ON B.ITEMID = C.ITEMID
   ON A.ITEMID = C.ITEMID

或者这将是用这种形式编写的有效查询

FROM
   SQL.TableA A LEFT JOIN 
   SQL.TableB B LEFT JOIN
   SQL.TableC C ON ColumnThatAandBTablesHave = C.ITEMID

【讨论】:

以上是关于没有on子句的连续连接[重复]的主要内容,如果未能解决你的问题,请参考以下文章

MYSQL CONCAT 停止使用 WHERE 子句处理连接表 [重复]

什么是sql中的连接顺序[重复]

使用关键字与 ON 子句 - MYSQL [重复]

MySQL“On 子句中的未知列”[重复]

MySQL错误1054未知列'persons.PersonID' in on子句[重复]

Oracle使用带有SPLIT的WITH子句连接表[重复]