【发布时间】:2020-09-25 08:49:02
【问题描述】:
我经常发现自己在 PostgreSQL 中使用(不是双关语)USING 子句,并且想知道在多个 USING 的情况下如何做出选择 在同一个键名上。
让我用一个简单的例子来解释: 让表 A、B 和 C 具有 userid 列。 如果我在做:
SELECT A.c1, A.c2, ...
FROM A
JOIN B USING(userid)
JOIN C USING(userid) ;
Postrges 如何处理由于表 B 和 C 都有列 userid 而产生的冲突?输出结果是什么?
A.userid = B.userid AND A.userid = C.userid
或
A.userid = B.userid AND B.userid = C.userid
我希望我已经足够清楚了,提前感谢您的回答。
PS:我没有做多个 USING 子句,因为我发现它不可读,但我想知道它是如何工作的。
【问题讨论】:
-
JOIN C USING(userid)使用上一次加入的唯一用户 ID,既不是 A 也不是 B。 -
您的问题涉及查询的处理顺序。如前所述,解释计划将向您展示您系统上的流程以及您目前的数据量。然而,这个顺序不是固定的。优化器根据可用索引、表大小、当前统计信息等选择操作顺序。随着这些变化,计划本身也(可能)发生变化。
标签: sql postgresql using