我有一个简单的连接查询,如下所示。

select *
from user u left join
     user_roles ur
     on  ur.user_id = u.user_id
     and ur.created_by = 'Mike'
where u.division = 'some division'

或者
select *
from user u left join
     user_roles ur
     on  ur.user_id = u.user_id
where u.division = 'some division'
and   ur.created_by = 'Mike'

关键是我已将附加过滤器子句条件从左连接移动到 where 子句。

如果我在多个列上连接两个表或将它放在 where 子句中,这有什么区别吗?

最佳答案

是的,这有很大的不同。

您基本上正在取消左连接并使其成为内部连接,隐藏不是由 Mike 创建的用户角色

Bell Mike
Toe Mike
Bob Jerry

第一个查询返回
Bell Mike
Toe Mike
Bob NULL

第二个查询返回
Bell Mike
Toe Mike

关于sql - 编写此查询的更好方法是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12389417/

10-10 16:28