首页 > 解决方案 > NOT IN 子句中的复合键

问题描述

我有一个表,其中两列(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
);

我已经尝试了上面的查询,但它不能正常工作。

标签: sqloracle

解决方案


或者,您可以使用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

推荐阅读