![](/img/trans.png)
[英]SQL query : how to select records which all records in related table have specific value of attribute
[英]SQL: Select records from one table if another table with related records has no specific value
我需要从一个表(TOOLBOXES)中选择所有记录,而这些记录在另一表(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.