跳过或忽略 oracle 中的特定行概念

Skip or ignore the particular row concept in oracle

我有两个表 TABLE1,其中包含列 ROLLNO、STATUS、ROOMNO、STNAME 和 TABLE2,其中包含列 ROLLNO、STATUS 和 ROOMNO。

CREATE TABLE TABLE1 
( 
    ROLLNO NUMBER(3), 
    STATUS VARCHAR2(2), 
    ROOMNO VARCHAR2(4), 
    STNAME VARCHAR2(3)
);

CREATE TABLE TABLE2 
(
    ROLLNO NUMBER(3), 
    STATUS VARCHAR2(2), 
    ROOMNO VARCHAR2(4)
);

表 TABLE1 和 TABLE2 中的数据是:

 INSERT INTO TABLE1 VALUES (100, '00', '1234', 'SOM');
 INSERT INTO TABLE1 VALUES (101, '01', '1423', 'TOM');
 INSERT INTO TABLE1 VALUES (102, '02', '1324', 'SAM');
 INSERT INTO TABLE1 VALUES (103, '03', '4321', 'DOM');
 INSERT INTO TABLE1 VALUES (104, '04', '', 'RAM');
 -----------------------------------------------------
 INSERT INTO TABLE2 VALUES (100,'00', '');
 INSERT INTO TABLE2 VALUES (101,'01', '1423');
 INSERT INTO TABLE2 VALUES (102,'02', '');
 INSERT INTO TABLE2 VALUES (103,'03', '4321');
 INSERT INTO TABLE2 VALUES (104,'04', '');

我想 select TABLE1 中的 ROLLNO 和 STNAME 列,方法是从两个表中查找 STATUS 和 ROOMNO 列的公共值,如果 ROOMNO 为空,我想 skip/ignore 所以它不会影响结果数据。

这是我使用过的查询,但不确定如果 ROOMNO 为空,ignore/skip 行要使用什么查询。

SELECT T1.ROLLNO, T1.STNAME
FROM TABLE1 T1
JOIN TABLE2 T2 ON T1.STATUS = T2.STATUS AND T1.ROOMNO = T2.ROOMNO

通过查询上述结果,我能够获得所需的结果,但如果 TABLE1 或 TABLE2 的 ROOMNO 值为 NULL,我想跳过该特定行或者我们是否需要使用 CASE WHEN 概念。我不确定。

在关系数据库中,NULL 不等于任何东西,甚至不等于另一个 NULL。 您可以将此视为暗示包含 T1.ROOMNO = T2.ROOMNO 的连接子句在逻辑上等同于:

T1.ROOMNO is not null and 
T2.ROOMNO is not null and 
T1.ROOMNO = T2.ROOMNO

因此您的查询已根据需要过滤掉 T1.ROOMNO 和 T2.ROOMNO 的空值。