SQL加入不存在

时间:2015-02-20 22:39:02

标签: sql

我在这两个表之间有以下内容:id列和case列

  Left Table                Right Table
| id1 | case#1 |          | case#1 | id1 |  
| id2 | case#1 |          | case#1 | id3 |
| id3 | case#2 |          | case#2 | id1 |

正如您所看到的,case#1未分配到右表中的id2,因此我想从左表中提取(id2, case#1)记录。

4 个答案:

答案 0 :(得分:1)

您需要使用多个JOIN条件执行OUTER JOIN:

   left_table as l right outer join right_table as r
   on l.id = r.id and l.case_ = r.case_
   where l.id IS NULL;

这将从左表中返回不匹配的行

答案 1 :(得分:0)

您是否尝试过左连接?

LEFT OUTER JOIN table ON table1.field1 = table2.field2

取决于你想要什么。如果您执行INNER JOIN,则会获得Table1 AND Table2中匹配的行。如果你执行OUTER JOIN,你将获得Table1的所有内容以及Table2中匹配的行。

答案 2 :(得分:0)

我使用LEFT JOIN并使用NULL子句在右表中选择了WHERE id的记录。请参阅下面的查询和演示:

SELECT 
      *
FROM LeftTable A
LEFT JOIN RightTable B ON A.id=B.id 
WHERE B.id IS NULL

<强> DEMO HERE

答案 3 :(得分:0)

在这种情况下,我将使用NOT EXISTS操作。

    SELECT  l.id, l.value
    FROM    LeftTable l
    WHERE   NOT EXISTS (SELECT 1 FROM RightTable r WHERE r.id = l.id and r.case_value = l.case_value)

效率比较以及NOT EXISTS与NOT IN与LEFT JOIN WHERE IS NULL之间的差异为here