我有一个SQL查询
SELECT * FROM A FULL OUTER JOIN B ON A.z = B.z WHERE A.z = 1 OR B.z = 1
Run Code Online (Sandbox Code Playgroud)
其中Az和Bz是主键.
目的是在两个表上进行完全外连接,同时它们的主键匹配给定值 - 这样只返回一行.
但我对如何将它扩展到3个或更多表感到困惑.它们的主键与给定索引匹配的限制因此总共只返回一行仍然存在.你怎么做呢?
Ben*_*oit 10
首先,请注意,在提供的查询中,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
Run Code Online (Sandbox Code Playgroud)
这使得(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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3119 次 |
| 最近记录: |