Oracle根据子查询生成有效的条件
如何在子查询返回NULL时进行修改,就好像条件不存在一样。 预期结果是:Oracle根据子查询生成有效的条件,oracle,select,subquery,constraints,Oracle,Select,Subquery,Constraints,如何在子查询返回NULL时进行修改,就好像条件不存在一样。 预期结果是: EQUIP MODEL VAL K1 K2 ----- ----- --- --- -- e1 m1 2 c1 5 e1 m1 1 6 但是,当然,由于子查询的条件,下面的代码返回null [数据表和数据] CREATE TABLE WC_BASE ( EQUIP VARCHAR2(15), MODEL VARCHAR2(15),
EQUIP MODEL VAL K1 K2
----- ----- --- --- --
e1 m1 2 c1 5
e1 m1 1 6
但是,当然,由于子查询的条件,下面的代码返回null
[数据表和数据]
CREATE TABLE WC_BASE (
EQUIP VARCHAR2(15),
MODEL VARCHAR2(15),
VAL VARCHAR2(15),
K1 VARCHAR2(15),
K2 VARCHAR2(15)
);
CREATE TABLE M_IF (
LOT VARCHAR2(15),
ITEM1 VARCHAR2(15)
);
INSERT INTO WC_BASE VALUES('e1','m1','2','c1','5');
INSERT INTO WC_BASE VALUES('e1','m1','1',NULL,'6');
INSERT INTO M_IF VALUES('L1','c1');
INSERT INTO M_IF VALUES('L2','c2');
INSERT INTO M_IF VALUES('L4',NULL);
[我的代码]
SELECT *
FROM WC_BASE
WHERE EQUIP ='e1'
AND MODEL ='m1'
--AND K1=(SELECT ITEM1 FROM M_IF WHERE LOT = 'L1'); --This returns result.
AND K1=(SELECT ITEM1 FROM M_IF WHERE LOT = 'L4'); --How to modify as if this conditon does not exist if the subquery returns NULL
您可以
联接这两个表,并添加一个在两个值都为NULL
时匹配的contion:
SELECT b.*, i.lot
FROM wc_base b
INNER JOIN m_if i
ON i.item1 = b.k1 OR (i.item1 IS NULL AND b.k1 IS NULL)
WHERE b.equip ='e1' AND b.model ='m1'
:
EQUIP | MODEL | VAL | K1 | K2 | LOT
:---- | :---- | :-- | :--- | :- | :--
e1 | m1 | 2 | c1 | 5 | L1
e1 | m1 | 1 | null | 6 | L4
装备|型号| VAL | K1 | K2 |批次
:---- | :---- | :-- | :--- | :- | :--
e1 | m1 | 2 | c1 | 5 | L1
e1 | m1 | 1 |空| 6 | L4