我有两个桌子。表A和表B。
我想从表A中选择不在表B中的所有内容。 听起来很容易,我需要根据两个值(两列)进行选择 修订版和案例类型。像这样的东西。
select a.revision, a.casetype from A a
minus
select b.revision, b.casetype from B b;
问题是我不会从表A取回ID。
是否可以选择整个表A减去表B,其中条件由两列组成?我想坚持使用SQL(没有PL / SQL)
我还尝试在下面编写类似查询的内容,但我想我做不到,因为我需要完全检查版本和案例类型
select * from A a where a.casetype IN (select...) and a.revision IN (select...)
任何想法如何解决?谢谢
答案 0 :(得分:4)
当然,我认为基本的不存在检查应该可以工作。
select a.id, a.revision, a.casetype
from A a
where not exists (
select 1
from B
where revision = a.revision and casetype = a.casetype
);
答案 1 :(得分:3)
Oracle支持元组,因此,如果您愿意,可以这样做:
select a.*
from a
where (a.revision, a.casetype) in (select a.revision, a.casetype from A a
minus
select b.revision, b.casetype from B b
);
我通常会选择not exists
,但这是基于您已经完成的工作的解决方案。
答案 2 :(得分:0)
除了应该可以工作
从A a中选择a.revision和a.casetype 除了 从B b中选择b.revision,b.casetype;