【发布时间】:2021-08-02 00:04:44
【问题描述】:
我有一个包含 NAME & CODE 列的表 TABLE1,我有一个包含 NAME、COLUMN1 和 COLUMN2 列的表 TABLE2。我们需要从 TABLE1 中选择一条 CODE 列值应该介于 COLUMN1 和 COLUMN2 列值之间的记录。
如果CODE值长度大于等于7,则需要检查CODE值的“第七个字符”
a) 如果第七个字符是 D 或 S 则不选择记录
b) 如果第七个字符不是 D 或 S ,则检查 CODE 列的值是否介于 TABLE2 的 COLUMN1 和 COLUMN2 列的值之间,如果是则选择记录
如果 CODE 值长度小于 7,那么我们需要检查 CODE 值是否介于 COLUMN1 和 COLUMN2 列的值之间。如果是,请从 TABLE1 中选择记录,否则不要选择
CREATE TABLE TABLE1 (NAME VARCHAR2(6), CODE VARCHAR2(10));
INSERT INTO TABLE1 VALUES ('JOHN', 'K062');
INSERT INTO TABLE1 VALUES ('JEFF', 'K08117');
INSERT INTO TABLE1 VALUES ('KATE', 'K08419');
INSERT INTO TABLE1 VALUES ('KIWI', 'M991011');
INSERT INTO TABLE1 VALUES ('TARA', 'S12312D');
INSERT INTO TABLE1 VALUES ('SOMA', 'T3499XS');
INSERT INTO TABLE1 VALUES ('RAMA', 'Z043');
INSERT INTO TABLE1 VALUES ('GEET', '1234567');
CREATE TABLE TABLE2 (NAME VARCHAR2(6), COLUMN1 VARCHAR2(10), COLUMN2 VARCHAR2(10));
INSERT INTO TABLE2 VALUES ('JOHN', 'K062', 'K062');
INSERT INTO TABLE2 VALUES ('JEFF', 'K08111', 'K08119');
INSERT INTO TABLE2 VALUES ('KATE', 'K08419', 'K08419');
INSERT INTO TABLE2 VALUES ('KIWI', 'M991010', 'M991010');
INSERT INTO TABLE2 VALUES ('TARA', 'S0000XA', 'S99912S');
INSERT INTO TABLE2 VALUES ('SOMA', 'T07', 'T3499XS');
INSERT INTO TABLE2 VALUES ('RAMA', 'Z041', 'Z043');
INSERT INTO TABLE2 VALUES ('GEET', '1234567', '1234567');
这是我写的查询,
SELECT T1.NAME, T1.CODE
FROM TABLE1 T1
JOIN TABLE2 T2 ON T1.NAME = T2.NAME
WHERE SUBSTR(T1.CODE,7,1) NOT IN ('D', 'S')
AND T1.CODE BETWEEN T2.COLUMN1 AND T2.COLUMN2;
如果我在上面查询,我得到了其他结果,那么查询下面的结果会是什么?
我得到的结果:
NAME CODE
-----------------
GEET 1234567
结果需要是:
NAME CODE
--------------------
JOHN K062
JEFF K08117
KATE K08419
RAMA Z043
GEET 1234567
【问题讨论】: