我需要从一个表(TOOLBOXES)中选择所有没有相关记录的记录,而在另一个表(TOOLS)中没有特定字段值。
换句话说:
kind=HAMMER
。问题:
如何选择所有没有TOOL(kind = HAMMER)的TOOLBOXES?
答案 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秒