2016-01-13 4 views
-1

я расскажу кому-то только ->Если вы не может мне помочь, Вы не должны голосовать вниз на мой вопрос.SQL оракул запрос выбрать, где из

У меня есть проблема о ....

данных (в таблице):

A_ID EMP_ID 
1
2
1 0122 
1 0121 

И вход:

EMP_ID 

0124 
0125 
0121 
0120 

мне нужен выход: (из положить EMP_ID нет в моем столе)

EMP_ID 
0124 
0125 
0120 

FYI: Я не могу создать таблицу на этой схеме. (Мое разрешение отрицает)

Теперь, я понятия не имею. Может ли кто-нибудь помочь мне решить, пожалуйста?

+0

Какой путь вы получаете ваш вклад? – sagi

+0

@sagi Извините! Я не понимаю ваш последний вопрос, сэр. –

+0

Вы сказали, что у вас есть вход, как вы получаете этот вход? стол? Просто вопрос на бумаге? из другой программы? – sagi

ответ

0

OK!

Первоначально измененный ввод данных в SQL. (Могут быть использованы "Текстовый редактор" для справки)

EMP_ID 

0124 
0125 
0121 
0120 

Результат

SELECT '0123' AS EMP_ID FROM DUAL UNION 
    SELECT '0124' AS EMP_ID FROM DUAL UNION 
    SELECT '0125' AS EMP_ID FROM DUAL UNION 
    SELECT '0121' AS EMP_ID FROM DUAL UNION 
    SELECT '0120' AS EMP_ID FROM DUAL 

Следующая использование SQL "не", где причина.

CREATE TABLE "POLICY"."A_EMP" (
    A_ID NUMBER(5) PRIMARY KEY, 
    EMP_ID NUMBER(4) NOT NULL 
); 

INSERT INTO "POLICY"."A_EMP" (A_ID, EMP_ID) VALUES ('1', '0123'); 
INSERT INTO "POLICY"."A_EMP" (A_ID, EMP_ID) VALUES ('2', '0123'); 
INSERT INTO "POLICY"."A_EMP" (A_ID, EMP_ID) VALUES ('1', '0122'); 
INSERT INTO "POLICY"."A_EMP" (A_ID, EMP_ID) VALUES ('1', '0121'); 

-- ### Try this ! ### --- 
SELECT T.EMP_ID FROM ( 
    SELECT '0123' AS EMP_ID FROM DUAL UNION 
    SELECT '0124' AS EMP_ID FROM DUAL UNION 
    SELECT '0125' AS EMP_ID FROM DUAL UNION 
    SELECT '0121' AS EMP_ID FROM DUAL UNION 
    SELECT '0120' AS EMP_ID FROM DUAL 
) T WHERE T.EMP_ID NOT IN (SELECT B.EMP_ID FROM A_EMP B); 
0

Используйте левое соединение и фильтруйте записи с нулями в существующей таблице.

select s.emp_id from input_table s 
    left join 
existing_table t 
    on s.emp_id=t.emp_id 
where t.emp_id is null 

См демонстрационные здесь

http://sqlfiddle.com/#!4/ca1a2

+0

Но я не могу создать таблицу. Можно ли найти другой способ? Пример: где EMP_ID out (input_list) ... –

+0

Тогда как вы получаете 'Input' – Utsav

+0

@Utsave Я получаю его по текстовому файлу. (это так исправно) –

0

Без создания временной таблицы, вы можете использовать функцию pipiline строить свои данные на лета, читая ваш вход, с чем-то вроде этого:

CREATE TYPE t_emp_id IS TABLE OF varchar2(16) 
/
CREATE OR REPLACE FUNCTION get_emp_id_tab RETURN t_emp_id AS 
    res_tab t_emp_id := t_emp_id(); 
BEGIN 
    /* 
    scan your input and insert data into tab 
    */ 

    /* just for example */ 
    res_tab.extend; 
    res_tab(res_tab.last) := '0123'; 
    res_tab.extend; 
    res_tab(res_tab.last) := '0124'; 
    res_tab.extend; 
    res_tab(res_tab.last) := '0125'; 
    res_tab.extend; 
    res_tab(res_tab.last) := '0121'; 
    res_tab.extend; 
    res_tab(res_tab.last) := '0120'; 

    RETURN res_tab; 
END; 
/

Редактирование этой функции для получения необходимых параметров и сканирования ваших входов, вы c ould воспользуйтесь функцией, чтобы сделать запрос, например,

SELECT column_value 
FROM TABLE(get_emp_id_tab()) 
MINUS 
SELECT emp_id 
FROM your_table 
+0

Извините, я пытаюсь проверить ваш ответ, но я получаю: 'ORA-01031: недостаточные привилегии' И' * Причина: Была сделана попытка выполнить операцию базы данных без необходимых привилегий. * Действие: запросите администратора базы данных или назначенного администратора безопасности , чтобы предоставить вам необходимые привилегии. –

+0

Таким образом, вы не можете создавать функции и/или типы; единственный способ, которым я вижу, - это некоторый динамический SQL, создавая запрос, содержащий ваши входные данные, вместо использования конвейерной функции, но это плохое решение. Посмотрим, сможет ли кто-нибудь найти лучший способ. – Aleksej

+0

Большое спасибо @Aleksej. Да, теперь я жду кого-то, может быть известен другой путь или лучшая идея для решения. :) –