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
感谢
答案 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)
以下查询将显示tabl1
和tab2
表中存在的行,但tab1.c
和tab2.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 。