Запрос для вывода значений, которых нет в таблице

#sql #oracle

#sql #Oracle

Вопрос:

Нужна помощь в Oracle query

Требование:

У меня есть 5 строк в таблице, допустим, ID = 1, 2, 3, 4, 5

Требование таково, что пользователь может передавать любое значение в качестве входных данных, и если этого значения нет в таблице, то запрос должен вернуть мне значение, которого нет.

Пример:
1. Если пользователь передает 9, то запрос Oracle должен возвращать выходные данные как 9
2. Если пользователь передает 1,2,10, то запрос Oracle должен возвращать выходные данные как 10

поскольку 9 и 10 в приведенном выше примере отсутствуют в таблице.

Я использую следующий запрос, но не получаю результата.

 SELECT ID
FROM TABLE_NAME WHERE ID NOT IN
(SELECT ID 
FROM TABLE_NAME where ID NOT in (1,2,10))
  

Комментарии:

1. @V4Vedanta — это просто фиктивное значение, используемое в примере … больше ничего … мое требование — проверить, доступно ли переданное значение в таблице… если нет, то отобразите это значение.

2. Как пользователь передает «1,2,10»? В виде строки, массива значений или содержимого другой таблицы? Пожалуйста, уточните.

Ответ №1:

 create table z (id number);
Table created.

SQL> insert into z values (1);
1 row created.
SQL> insert into z values (2);
1 row created.
SQL> insert into z values (3);
1 row created.
SQL> insert into z values (4);
1 row created.
SQL> insert into z values (5);
1 row created.

SQL> select 10 id from dual
  2  minus
  3  select id from z;

    ID
----------
    10
  

Ответ №2:

Вы могли бы использовать вложенную таблицу в качестве входных данных:

 SQL> CREATE TABLE table_name (ID NUMBER NOT NULL); 

Table created

SQL> INSERT INTO table_name (SELECT ROWNUM FROM dual CONNECT BY LEVEL <= 5); 

5 rows inserted

SQL> CREATE TYPE tab_number AS TABLE OF NUMBER;
  2  / 

Type created

SQL> SELECT *
  2    FROM TABLE(tab_number(1,2,10)) x
  3   WHERE x.column_value NOT IN (SELECT ID FROM table_name);

COLUMN_VALUE
------------
          10