Состояние создания Oracle в соответствии с подзапросом - PullRequest
0 голосов
/ 03 октября 2019

Как изменить, как если бы условие не существовало, если подзапрос возвращает NULL. Ожидаемый результат:

EQUIP MODEL VAL K1 K2
----- ----- --- --- -- 
e1    m1    2   c1   5
e1    m1    1        6

, но, конечно, мой код ниже возвращает ноль из-за условия с подзапросом.

[Таблицы данных и данные]

  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

1 Ответ

0 голосов
/ 04 октября 2019

Вы можете JOIN обе таблицы и добавить условие, которое соответствует, когда оба значения NULL:

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'

Демонстрация на DB Fiddle :

EQUIP | MODEL | VAL | K1   | K2 | LOT
:---- | :---- | :-- | :--- | :- | :--
e1    | m1    | 2   | c1   | 5  | L1 
e1    | m1    | 1   | <em>null</em> | 6  | L4 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...