我有一个表,其中两列(Invoice_Id和Invoice_line)作为主键(复合键)。还有另一个具有类似结构的表。我想从表1中过滤掉不在表2中的数据。
类似于下面的查询
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
);
我已经尝试了上述查询,但是无法正常工作。
答案 0 :(得分:0)
尝试以下-
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
答案 1 :(得分:0)
不存在
FROM INVOICE_LINE T1
WHERE
NOT exists (SELECT 1
FROM INVOICE_LINE2
WHERE T1.INVOICE_ID = T2.INVOICE_ID
AND T1.LINE = T2.LINE
);
答案 2 :(得分:0)
或者,您可以使用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
答案 3 :(得分:0)
您还可以使用minus运算符
因此,如果表2完全相同,则可以按如下所示编写SQL
SELECT * FROM INVOICE_LINE T1
MINUS
SELECT * FROM INVOICE_LINE2 T2