选择表A减去表B,其中条件由两列组成

时间:2018-09-12 18:30:47

标签: sql oracle

我有两个桌子。表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...)

任何想法如何解决?谢谢

3 个答案:

答案 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;