在较低查询中使用union子句中的upper查询结果

时间:2015-09-07 08:53:22

标签: oracle union

我使用union运算符来组合2个查询的结果。现在我想在第二个查询中使用第一个查询的结果,这样我就可以从第二个查询中排除一些记录。

E.g。

select <some_columns> from tableA Union select <same_columns> from tableA where <one_column_val> != <some_val_from_first_query>

以下是我的查询

SELECT a.*, b.*, c.*
  FROM tableA a,
       tableB b,
       tableC c
    where b.field_1 = c.field_1
    and a.field_2 = c.field_2
union
SELECT a.*, b.*, c.*
  FROM tableA a,
       tableB b,
       tableC c
    where b.field_1 = c.field_1
    and a.field_3=c.field_3
    and a.field_2 <> {a.field_2 from upper query}

请建议所需的更改。

提前致谢

1 个答案:

答案 0 :(得分:0)

SQL联盟中的每个选择都不了解其他联盟。因此,您只需要再次显式地写出整个查询,在您的情况下,可以是NOT EXISTS或NOT IN。例如,您可以在NOT EXISTS子句中看到整个查询被复制为派生表:

*

如果您的RDBMS支持CTE,您可以将查询抽象为CTE而不是自己重复。请注意,如果您的RDBMS支持,您可能也应该使用JOIN语法,并且您可能会与dclsockets160.bpl选择器发生列名冲突,而您必须解决此问题。