我在这两个表之间有以下内容: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)
记录。
答案 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