【发布时间】:2021-06-10 10:23:10
【问题描述】:
我有 2 个表 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
我们需要从 table2 中选择状态为 01、02、03 的行,从 table1 中选择状态为 01,02 和 如果 table1 的状态为 01、02 的行在 table2 中存在,那么我们不应该在结果表中输入重复的行
结果中应该有唯一的行。
我尝试使用这个查询,但是这个查询对于这个问题是错误的
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')
);
这是正确的查询吗?
【问题讨论】:
-
为什么那个查询(以及康纳回答中的那个)是“错误的”?这是一个家庭作业问题吗?如果是这样,您可以使用哪些查询的实际限制是什么? (此外,如果您使用
UNION而不是UNION ALL,则可以避免显式的DISTINCT步骤,因为UNION输出两个查询的不同结果集。)
标签: oracle oracle-sqldeveloper