所以我有两个表,它们都有一个由两列组成的复合主键。我想找到第一个表中第二个表中不存在的条目,始终记住我的主键是复合的。
我知道我必须使用NOT IN,但我不确定如何使其与两个主键一起使用。本质上我想要这样的东西:
SELECT * FROM table1
WHERE id NOT IN (SELECT id FROM table2)
Run Code Online (Sandbox Code Playgroud)
虽然id是由两列组成的复合主键,id1和id2。有什么想法如何解决这个问题吗?
编辑:考虑到危险,NOT IN我会尽力更好地描述我需要什么。除了选择不在第二个表中的条目之外,还需要在同一查询中执行两个操作:
AND t1.column <5table1与第三个表进行内部联接id1,因为我需要该表中的一列。not in看起来这会让事情变得过于复杂——而且,根据德鲁的评论,如果括号内的任何内容可能是,则可能非常危险和/或令人恼火null。
这看起来像是教科书上使用的outer join。在键的列上使用 a ,如果发现它们(或右侧表中的left [outer] join任何其他单个不可列)位于连接之后,则意味着右侧表中没有具有该组合键的匹配记录。nullnull
select *
from
t1
inner join t3 on
t1.whatever = t3.whatever
left join t2 on
t1.id1 = t2.id1 and
t1.id2 = t2.id2
where
t1.some_column < 5 and -- 'normal' where criteria
t2.id1 is null; -- no match for key in t2
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2642 次 |
| 最近记录: |