我使用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}
请建议所需的更改。
提前致谢
答案 0 :(得分:0)
SQL联盟中的每个选择都不了解其他联盟。因此,您只需要再次显式地写出整个查询,在您的情况下,可以是NOT EXISTS或NOT IN。例如,您可以在NOT EXISTS子句中看到整个查询被复制为派生表:
*
如果您的RDBMS支持CTE,您可以将查询抽象为CTE而不是自己重复。请注意,如果您的RDBMS支持,您可能也应该使用JOIN语法,并且您可能会与dclsockets160.bpl
选择器发生列名冲突,而您必须解决此问题。