sql - SQL中如何连接多个select语句

标签 sql performance oracle join subquery

我想知道如何在 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;

谢谢你。

最佳答案

我认为您可以将此查询重写为以下内容(请参阅此 SQL Fiddle ):

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条件,以提高可读性和清晰度。但这很可能是个人喜好:-)

关于sql - SQL中如何连接多个select语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15581236/

相关文章:

php - php中try-catch的性能

mysql - 如何连接 Oracle 中的三个表,其中一个表的外键列中有空值?

c# - 有没有办法使用 DBMS_Alert 通知 Winform 应用程序数据库更改

sql - 递归 CTE 如何逐行运行?

javascript - 哪些浏览器内部操作会阻止 requestAnimationFrame 被调用?

SQL Join 从任一表(多个表)中获取数据

java - Java 中通过引用连接数组

具有 RSA 签名的 Java 存储过程 SHA256 不可用

java - 初始 SessionFactory 创建失败 : java. lang.NoClassDefFoundError: javax/persistence/NamedStoredProcedureQuery

c# - OOP 中的数据库查询......设计模式?