如何编写优化的SQL查询以获取表1中未包含在表2和表3中的结果,类似地在表2中不在表1和表3中以及对于表3中的结果不在表1中和表2
我正在尝试提高我目前正在处理的查询的性能
TABLE A
LEFT JOIN B
LEFT JOIN C
WHERE B is NULL and C is NULL
UNION
TABLE B
LEFT JOIN A
LEFT JOIN C
WHERE A is NULL and C is NULL
UNION
TABLE C
LEFT JOIN A
LEFT JOIN B
WHERE A is NULL and B is NULL
有什么方法可以避免3次读取表格?
答案 0 :(得分:0)
尝试使用完全外部联接。
select a.*, b.*, c.*
from a full outer join b on
a.A_keys = b.B_keys
full outer join c on
a.A_keys = c.C_keys AND
b.B_keys = c.C_keys
正如其他人所指出的那样,因为您没有提供样本数据或联接条件,所以无法猜测第二次联接(至c)是否需要条件A和B或仅条件A或仅条件B。因此,您需要工作对你自己有点偏爱。
作为参考,FULL OUTER JOIN就像一口气做一次LEFT和RIGHT OUTER JOIN。也就是说,它将返回:
我将留给您添加“ NULL过滤器”以获取您感兴趣的记录。
答案 1 :(得分:-1)
那么,A独特,B独特,C独特?由于其他表格中没有其他行,我想您只是想要
SELECT * FROM A
UNION
SELECT * FROM B
UNION
SELECT * FROM C