#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