Oracle根据子查询生成有效的条件

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),

如何在子查询返回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),
      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