SQL:如果另一个包含相关记录的表没有特定值,请从一个表​​中选择记录

时间:2019-06-23 19:40:31

标签: sql

我需要从一个表(TOOLBOXES)中选择所有没有相关记录的记录,而在另一个表(TOOLS)中没有特定字段值。

换句话说:

  1. 我在工具箱中有记录
  2. 有几条外键与TOOLBOXES相关的TOOLS记录
  3. 某些TOOLS记录的字段为kind=HAMMER

问题:

如何选择所有没有TOOL(kind = HAMMER)的TOOLBOXES?

2 个答案:

答案 0 :(得分:2)

您可以使用NOT EXISTS

SELECT *
FROM TOOLBOXES tb 
WHERE NOT EXISTS(SELECT 1 FROM TOOLS t WHERE tb.col_name_fk = t.col_id AND t.kind = 'Hammer')

或者使用LEFT JOIN

SELECT tb.*
FROM TOOLBOXES tb
LEFT JOIN TOOLS t
  ON t.kind = 'Hammer'
 AND tb.col_name_fk = t.col_id
WHERE t.col_id IS NULL;

答案 1 :(得分:1)

我正在寻求Lukasz Szozda的Left Join方法的答案。但是,对于上述情况,我想在我们自己的开发数据库上运行一些测试(来自我的家庭网络,因此结果比平时慢很多):两个表和两个查询-一个带有子查询,另一个带有左联接。

表大小分别为:

320131条记录 和 1736409记录

加入查询:5分钟59秒

不存在的子查询:25分钟46秒