Joining/exist 表 Oracle 查询

Joining/exist query of tables Oracle

我有 2 个 tables TABLE1,列名为 ROLLNO 和 STATUS & TABLE2,列名为 ROLL 和 STATUS。

CREATE TABLE TABLE1 ( ROLLNO VARCHAR2(10) NOT NULL, STATUS VARCHAR2(2));

INSERT INTO TABLE1 VALUES ('1234567890', '01');
INSERT INTO TABLE1 VALUES ('1234567891', '02');
INSERT INTO TABLE1 VALUES ('1234567895', '01');
INSERT INTO TABLE1 VALUES ('1234567896', '02');
INSERT INTO TABLE1 VALUES ('1234567897', '00');
------------------------------------------------------------------------
CREATE TABLE TABLE2 ( ROLLNO VARCHAR2(10) NOT NULL, STATUS VARCHAR2(2));

INSERT INTO TABLE2 VALUES ('1234567890', '01');
INSERT INTO TABLE2 VALUES ('1234567891', '02');
INSERT INTO TABLE2 VALUES ('1234567892', '01');
INSERT INTO TABLE2 VALUES ('1234567893', '02');
INSERT INTO TABLE2 VALUES ('1234567894', '03');
INSERT INTO TABLE2 VALUES ('1234567898', '04');
---------------------------------------------------------------------------

我只想得到如下所示的输出:

ROLLNO           STATUS
-----------------------
1234567890         01
1234567891         02
1234567892         01
1234567893         02
1234567894         03
1234567895         01
1234567896         02

我们需要 select 来自 table2 的状态为 01、02、03 的行和来自 table1 的状态为 01,02 的行和 如果 table1 的状态为 01、02 的行出现在 table2 中,那么我们不应该在结果 table

中输入重复的行

结果中应该有唯一的行。

我试过使用这个查询,但是这个查询对于这个问题是错误的

SELECT DISTINCT * FROM
(
   SELECT T2.ROLLNO, T2.STATUS FROM TABLE2 T2
   WHERE T2.STATUS IN ('01','02','03')
   UNION ALL
   SELECT T1.ROLLNO, T1.STATUS FROM TABLE1 T1
   WHERE T1.STATUS IN ('01','02')
);

这是正确的查询吗?

也许是这样的?

SQL> select *
  2  from (
  3  select
  4    x.*,
  5    row_number() over ( partition by rollno order by tab, status ) as x
  6  from (
  7  select t.*, 'T1' tab from table1 t
  8  where status in ('01','02','03')
  9  union all
 10  select t.*, 'T2' tab from table2 t
 11  where status in ('01','02','03')
 12  ) x
 13  )
 14  where x = 1;

ROLLNO     ST TA                              X
---------- -- -- ------------------------------
1234567890 01 T1                              1
1234567891 02 T1                              1
1234567892 01 T2                              1
1234567893 02 T2                              1
1234567894 03 T2                              1
1234567895 01 T1                              1
1234567896 02 T1                              1