Выделите запрос с условием "is null", а выбор после выбора / объединение влево не даст результатов. - PullRequest
1 голос
/ 05 мая 2019

Я пытаюсь на основе Oracle 12c выбрать записи из таблицы DETAIL, которые должны удовлетворять двум ограничениям where:

  1. внешний ключ находится во вспомогательном выборе
  2. column равно нулю

Следующий оператор с подвыбором (в предложении) не возвращает результатов вообще.

select *
  from DETAIL
  where (PARENT_ID) in (
    select ID from MASTER where COL1 = 1)
  and COL2 is null;

А также левое соединение не возвращает результатов:

select d.*
from MASTER m
left join DETAIL d
  on d.PARENT_ID = m.ID
where m.COL1 = 1
  and d.COL2 is null;

В настройках моей таблицы содержатся следующие таблицы:

create table MASTER (
  ID NUMBER(19) NOT NULL,
  COL1 NUMBER(19),
  primary key (ID)
);
insert into MASTER ("ID", "COL1") VALUES (1, 1);
insert into MASTER ("ID", "COL1") VALUES (2, 2);
insert into MASTER ("ID", "COL1") VALUES (3, 1);

create table DETAIL (
  ID NUMBER(19) NOT NULL,
  PARENT_ID NUMBER(19),
  COL2 NUMBER(2,0),
  primary key (ID),
  foreign key (PARENT_ID) references MASTER(ID)
);
insert into DETAIL ("ID", "PARENT_ID", "COL2") VALUES (1, 1, 1);
insert into DETAIL ("ID", "PARENT_ID", "COL2") VALUES (2, 2, 1);
insert into DETAIL ("ID", "PARENT_ID", "COL2") VALUES (3, 3, 1);
insert into DETAIL ("ID", "PARENT_ID", "COL2") VALUES (4, 3, 2);

В результате я получу более 0 записей на основе приведенного выше кода.

Любые рекомендации?Спасибо!

1 Ответ

1 голос
/ 05 мая 2019

В вашей таблице DETAIL значение COL2 всегда имеет значение и, следовательно, никогда не равно NULL. Из-за этого условие COL2 IS NULL никогда не выполняется, и ваши запросы не возвращают результатов.

...