【问题标题】:Join more than two tables by the same columns with Oracle USING clause使用 Oracle USING 子句按相同列连接两个以上的表
【发布时间】:2023-02-08 01:51:55
【问题描述】:

我有 3 个表:表 1、表 2 和表 3。 这三个表包含 3 个相同的列 SAMECOL1、SAMECOL2 和 SAMECOL3。 表 Table1 和 Table2 都有 MY_PK_COL 列,它是 Table1 的主键。

当我在 SQL Developer 中使用此查询时,出现错误:

SELECT * FROM Table1
INNER JOIN Table2 ON Table1.MY_PK_COL = Table2.MY_PK_COL 
JOIN Table3 USING (SAMECOL1, SAMECOL2, SAMECOL3)
  1. 00000 - “列定义不明确”

但是当我使用它时没关系:

SELECT * FROM Table1
JOIN Table2 USING (MY_PK_COL, SAMECOL1, SAMECOL2, SAMECOL3)
JOIN Table3 USING (SAMECOL1, SAMECOL2, SAMECOL3)

如果我理解得很好,在第一个查询中,3 列 SAMECOLx 被重命名为别名,例如 SAMECOL1_1、SAMECOL2_1、SAMECOL3_1,因此对于使用 USING 子句的第二个连接(模棱两可的事情)来说应该不是问题。

那么,第一个查询的问题在哪里?

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    如果我理解得很好,在第一个查询中,3 列 SAMECOLx 被重命名为别名,例如 SAMECOL1_1、SAMECOL2_1、SAMECOL3_1

    否。连接操作不会重命名列。如果您仅通过该连接查询了那两个表,那么您的客户会在显示结果时选择添加 _1 部分;它不是结果集的一部分。

    所以第一部分

    Table1
    INNER JOIN Table2 ON Table1.MY_PK_COL = Table2.MY_PK_COL 
    

    give 使两个表中的所有列都可用,包括仍然称为SAMECOL1 的两列,然后是下一部分

    JOIN Table3 USING (SAMECOL1, SAMECOL2, SAMECOL3)
    

    不知道您指的是两列中的哪一列 - 它无法区分 Table1.SAMECOL1Table2.SAMECOL2知道它们是相同的数据,但查询中没有任何内容表明是这种情况。

    在第二种形式中,第一个 USING 消除了歧义

    Table1
    JOIN Table2 USING (MY_PK_COL, SAMECOL1, SAMECOL2, SAMECOL3)
    

    只有一个 SAMECOL1 projected - 这有点来自两个源表,也没有一个源表。

    【讨论】:

      猜你喜欢
      • 2015-02-24
      • 1970-01-01
      • 2014-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-23
      相关资源
      最近更新 更多