[英]How to join multiple select statements in SQL
我想知道如何在1)样式和2)性能方面改进对这种形式的查询。 如果重要,我使用Oracle作为我的数据库。 此外,此查询的目的是从第一个select语句中选择在LEFT JOIN右侧的记录集中没有相应记录的所有记录。 ColumnA中的记录在任何表中都不一定是唯一的。
select ColumnA
from
(Select ColumnA
from Table1)
left join
((select ColumnA, ColumnB
from Table2)
union
(select ColumnA, ColumnB
from Table3))
using (ColumnA)
where ColumnB is null
group by ColumnA;
谢谢。
我认为不需要UNION
:
select T1.ColumnA
from Table1 T1
left join Table2 T2 ON T1.ColumnA = T2.ColumnA
left join Table3 T3 ON T1.ColumnA = T3.ColumnA
where T2.ColumnA IS NULL
or T3.ColumnA IS NULL
group by T1.ColumnA;
另一种选择是使用NOT IN
:
select distinct ColumnA
from Table1
where ColumnA not in (select ColumnA from Table2)
and ColumnA not in (select ColumnA from Table3);
这两个都应该返回Table1中不在Table2或Table3中的任何ColumnA记录。
我想你可以将此查询重写为以下内容(请参阅此SQL小提琴 ):
SELECT DISTINCT ColumnA
FROM (SELECT ColumnA
FROM Table1)
MINUS
(SELECT ColumnA
FROM Table2
UNION
SELECT ColumnA
FROM Table3);
至于样式,我建议使用显式连接条件语法LEFT JOIN ... ON table1.somecolumn = table2.someothercolumn
而不是USING
条件,以提高可读性和清晰度。 但这可能是个人偏好:-)
这有三种选择。
select distinct ColumnA
from Table1 a
left join Table2 b using(ColumnA)
left join Table3 c using(ColumnA)
where b.ColumnB is null
and c.ColumnB is null;
。
select distinct ColumnA
from Table1 a
where ColumnA not in(select ColumnA from Table2)
and ColumnA not in(select ColumnA from Table3);
。
select distinct ColumnA
from Table1 a
where ColumnA not in(select ColumnA from Table2 union
select ColumnA from Table3);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.