Oracle Sql - у меня есть две таблицы, и мне нужно отфильтровать таблицу1 с результатами из таблицы2.Мне нужно вернуть все table1, если table2 пуст - PullRequest
0 голосов
/ 18 мая 2018

В настоящее время я превращаю разделенную запятыми строку в таблицу чисел с именем поля ID.Затем я пытаюсь сделать nvl, чтобы выбрать все, если сгенерированная таблица пуста.

table1.ID = NVL(table2.ID, table1.ID)

У меня есть две таблицы, и мне нужно отфильтровать table1 с результатами из таблицы2.Мне нужно вернуть всю таблицу1, если таблица2 пуста.

Сценарий I

Таблица1

ID    
1    
2    
3    
4

Таблица2 (пусто)

ID

Return rows 1, 2, 3, 4

СценарийII

Table1

ID    
1    
2    
3    
4

Table2

ID    
2
3

Возвращаемые строки 2, 3

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Вы также можете использовать UNION

select t1.id
from table1 t1 
where not exists (select 1 from table2 where id = t1.id) union all
select t2.id
from table2 t2
where exist (select 1 from table1 where id = t2.id);
0 голосов
/ 18 мая 2018

Вы можете использовать фильтрацию в предложении where:

select t1.id
from table1 t1
where not exists (select 1 from table2) or
      exists (select 1 from table2 t2 where t2.id = t1.id);

Я не думаю, что join - правильный способ выразить эту логику.

...