【问题标题】:Consecutive joins without on clause [duplicate]没有on子句的连续连接[重复]
【发布时间】: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 的默认行为是什么?

标签: sql


【解决方案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

【讨论】:

    猜你喜欢
    • 2011-09-16
    • 1970-01-01
    • 2015-12-11
    • 2012-04-18
    • 1970-01-01
    • 1970-01-01
    • 2021-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多