Составной ключ в предложении NOT IN - PullRequest
0 голосов
/ 17 мая 2019

У меня есть таблица, в которой два столбца (Invoice_Id и Invoice_line) в качестве первичного ключа (составной ключ).И есть еще одна таблица с похожей структурой.Я хочу отфильтровать данные из таблицы 1, которой нет в таблице два.

Что-то похожее на запрос ниже

SELECT * 
   FROM INVOICE_LINE T1
   WHERE T1.INVOICE_ID AND T1.LINE
   NOT IN (SELECT T2.INVOICE_ID,T2.LINE
           FROM INVOICE_LINE2
           WHERE T1.INVOICE_ID = T2.INVOICE_ID
           AND   T1.LINE       = T2.LINE
);

Я пробовал запрос выше, но он не работает должным образом.

Ответы [ 4 ]

0 голосов
/ 17 мая 2019

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

Следовательно, вы могли бы написать SQL, как показано ниже, если Таблица 2 точно такая же

SELECT * FROM INVOICE_LINE T1
MINUS
SELECT * FROM INVOICE_LINE2 T2 
0 голосов
/ 17 мая 2019

использование не существует

 FROM INVOICE_LINE T1
   WHERE
   NOT exists (SELECT 1
           FROM INVOICE_LINE2
           WHERE T1.INVOICE_ID = T2.INVOICE_ID
           AND   T1.LINE       = T2.LINE
);
0 голосов
/ 17 мая 2019

В качестве альтернативы, вы можете использовать LEFT JOIN

SELECT * 

FROM 
    INVOICE_LINE T1 
        LEFT JOIN INVOICE_LINE2 T2 ON T1.INVOICE_ID = T2.INVOICE_ID
        AND   T1.LINE= T2.LINE

WHERE
    T2.INVOICE_ID IS NULL OR T2.Line IS NULL
0 голосов
/ 17 мая 2019

Попробуйте ниже -

select * FROM INVOICE_LINE T1
   WHERE (T1.INVOICE_ID,T1.LINE)
   NOT IN (SELECT T2.INVOICE_ID,T2.LINE
           FROM INVOICE_LINE2)

ИЛИ вы можете использовать левое соединение

select * FROM INVOICE_LINE T1 
left join INVOICE_LINE2 T2 on T1.INVOICE_ID = T2.INVOICE_ID
           AND   T1.LINE= T2.LINE
where T2.INVOICE_ID is null
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...