gpt4 book ai didi

sql - 在 Postgresql 中具有匹配索引的完整外部联接 3 个表

转载 作者:行者123 更新时间:2023-12-02 06:06:09 25 4
gpt4 key购买 nike

我有一个 SQL 查询

SELECT * FROM A FULL OUTER JOIN B ON A.z = B.z WHERE A.z = 1 OR B.z = 1

其中 A.z 和 B.z 是主键。

目的是在两个表的主键与给定值匹配时对两个表进行完全外部联接 - 因此只返回一行。

但我对如何将其扩展到 3 个或更多表感到困惑。它们的主键匹配给定索引的限制仍然存在,因此总共只返回一行。你是怎么做到的?

最佳答案

首先,请注意,在提供的查询中,您请求的 FULL OUTER JOIN 可以重写为:

         SELECT *
FROM (SELECT * FROM A WHERE z = 1) A
FULL OUTER JOIN (SELECT * FROM B WHERE z = 1) B ON A.z = B.z

这使得 (IMO) 更清楚数据源是什么以及连接条件是什么。有那么一刻,根据您的 WHERE 条件,我感觉您实际上想要一个 INNER JOIN。

有了这个,您可能可以更轻松地扩展:

         SELECT *
FROM (SELECT * FROM A WHERE z = 1) A
FULL OUTER JOIN (SELECT * FROM B WHERE z = 1) B ON A.z = B.z
FULL OUTER JOIN (SELECT * FROM C WHERE z = 1) C ON COALESCE(A.z,B.z) = C.z
FULL OUTER JOIN (SELECT * FROM D WHERE z = 1) D ON COALESCE(A.z,B.z,C.z) = D.z

关于sql - 在 Postgresql 中具有匹配索引的完整外部联接 3 个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9740975/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com