连接多个表时 USING 的 PostgreSQL 行为

问题描述 投票:0回答:1

我一直无法找到这个问题的答案,所以我想我会把它带到这里来。

在 PostgreSQL 中连接表时,我经常喜欢使用 USING 关键字来指定连接条件,因为这样更容易一目了然。然而,我意识到我实际上并不知道这是否会产生与使用更明确的 ON 不同的行为。在两者之间进行选择时是否有任何性能考虑?

最后,当将两个以上的表连接在一起时,USING 的具体行为如何?例如。

SELECT * FROM table1 JOIN table2 USING (k1) JOIN table3 USING (k2)
如果表 2 同时具有 k1 和 k2 与表 1 具有 k1 和 k2 相比,会发生什么?

我已经尝试过语法,但我仍然不清楚到底发生了什么。我已经搜索过有关此内容的文档,但一无所获。

sql postgresql join key
1个回答
0
投票

如果

table1
table2
都有列
k2
,但它们不用作
table1
table2
之间的连接条件的一部分,则会引发异常,如以下查询所示:

WITH
  table1(id, k1, k2) AS (
    VALUES (11, 11, 21)),
  table2(id, k1, k2) AS (
    VALUES (21, 11, 21)),
  table3(id, k1, k2) AS (
    VALUES (31, 11, 21))
SELECT *
  FROM table1
  JOIN table2
    USING (k1)
  JOIN table3
    USING (k2);
ERROR:  common column name "k2" appears more than once in left table 

SQL state: 42702
© www.soinside.com 2019 - 2024. All rights reserved.