跳过或忽略 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 的空值。
我有两个表 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 的空值。