繁体   English   中英

SQL:如果另一个具有相关记录的表没有特定值,则从一个表中选择记录

[英]SQL: Select records from one table if another table with related records has no specific value

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

换一种说法:

  1. 我在TOOLBOXES中有记录
  2. 有一些由外键与TOOLBOXES相关的TOOLS记录
  3. 一些TOOLS记录具有字段kind=HAMMER

问题:

如何选择所有没有工具(种类=锤子)的工具箱?

您可以使用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;

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

表大小分别是:

320131条记录和1736409条记录

加入查询:5分钟59秒

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM