使用SQL WHERE或JOIN“排除”结果?

用户名

我有一个查询,我想向其中添加一些日志,以删除当我向JOIN中添加一个表时成功匹配的结果。

我现在通过附加的WHERE IN语句来完成此操作:

SELECT blah blah FROM donation
WHERE donation.id NOT IN (SELECT donation_id FROM donation_relation)

我只是担心,当表开始增长时,从子查询中的donation_relation表中选择所有ID字段将开始拖动。使用JOIN进行此排除的更有效方法(如果存在)是什么?这两个表可以在donation.iddonation_relation.donation_id上联接

谢谢!

贾尔

LEFT OUTER JOIN 选择:

SELECT blah blah
FROM donation
  LEFT JOIN donation_relation ON donation.id = donation_relation.donation_id 
WHERE donation_relation.donation_id IS NULL;

可能更快,尤其是在使用MySQL时。

EXISTS 版本:

SELECT blah blah FROM donation
WHERE NOT EXISTS (SELECT donation_id FROM donation_relation
                  WHERE donation.id = donation_relation.donation_id )

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章