从减号查询中选择一个字段

时间:2014-05-02 14:59:36

标签: sql oracle

select a, b, c from tab1
minus
select d, e, f from tab2

以上是我的查询的样子。如何重新格式化我的查询以显示a,b,c和f?

我尝试了以下但我一直收到无效的标识符。

select t.a, t.b, t.c, t.f from
(select a, b, c from tab1
minus
select d, e, f from tab2)t

感谢

2 个答案:

答案 0 :(得分:0)

首先,回想一下,运算符minus获取第一个查询的结果(即来自a, b, c的列tab1的行),并删除所有行,使tab2中有相应的行{1}},其列d, e, f的组合与a, b, c的{​​{1}}的组合相匹配。

现在应该清楚的是,你要做的事情没有意义:第二个选择的所有行,即

tab1

从第一个选择返回的行中排除。换句话说,结果中没有一行具有来自列select d, e, f from tab2 的值(或者就此而言,来自f的任何列)。

答案 1 :(得分:0)

以下查询将显示tabl1tab2表中存在的行,但tab1.ctab2.f的值不同。如果要显示tab1中存在的行,但即使tab2中不存在a和b值,也可以相应地修改WHERE子句。

select tab1.a, tab1.b, tab1.c, tab2.f
from tab1 FULL OUTER JOIN tab2
ON tab1.a = tab2.d AND tab1.b = tab2.e
WHERE
-- (tab1.a IS NOT NULL AND tab1.b IS NOT NULL) AND 
-- (tab1.c IS NULL OR tab2.f IS NULL) OR
(NVL(tab1.c, 0) <> NVL(tab2.f, 0));

这是 SQL Fiddle demo