没有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 子句处理连接表 [重复]