Как узнать, какие элементы, содержащиеся в предложении IN, не были найдены?

У меня есть список с 10 пунктами в моем предложении IN, в моем SELECT было найдено только 8 элементов. как узнать, какие элементы, содержащиеся в предложении IN, не были найдены?

SELECT * FROM SOME_TABLE WHERE ID IN (1,2,3,4,5,6,7,8,9,10)

Мой стол:

** ID NAME ** 
------------------
1 JOAO 
2 ХОЗЕ
3 УИЛЬЯМ
4 МАРИЯ
5 CARLOS
6 бенджамин
7 Даниель
9 Вера
11 Хоаким

1 ответ

Решение

Если вам нужно знать, какие предметы перечислены в IN В предложении не найдено совпадений в таблице, вы можете воспользоваться пользовательской или встроенной коллекцией - вложенной таблицей или массивом переменных. В приведенном ниже примере используется встроенная коллекция sys.odcinumberlist() элементы которых имеют числовой тип данных:

/*sample of data */ 
with t1(col) as(
   select level
     from dual
  connect by level <= 11
 )

 select s.column_value as missing_val
   from t1      /* here you list the elements as you would using IN clause*/
  right join table(sys.odcinumberlist(1,2,3,4,5,6,7,8,9,10, 70)) s
     on (t1.col = s.column_value)
  where t1.col is null

Результат:

MISSING_VAL
------------
          70

если элементы в вашем списке имеют varchar тип данных, OdciVarchar2List() коллекция может быть использована или ODCIDateList() для элементов date тип данных. Вы также можете создать собственную коллекцию типов SQL. Например:

create or replace type T_Type_Name is table of number
Другие вопросы по тегам