mysql ON子句中的OR和连续连接的效果不同?
select *from a
join b
on (a.userid = b.id or a.clientid = b.id)
select *from a
join b b1 on (a.userid = b1.id)
join b b2 on (a.clientid = b2.id)
上面的两个sql语句我的理解应该效果是一致的,但是现实却不同,我有哪里理解出现问题了么?
回答
假设a,b 两表有如下数据:
create table a (userid int, clientid int, name char(10));insert into a values (1,2,'A'),(3,4,'B'),(2,5,'C');
CREATE TABLE b (id int, bname char(10));
INSERT into b VALUES(1,'D'),(2,'E'),(3,'F'),(4,'G'),(5,'H');
对应第一条语句:
select *from a
join b
on (a.userid = b.id or a.clientid = b.id)
绿色是第一个条件的结果,并上黄部分的第二条结果
等价于
select *from a
join b
on (a.userid = b.id)
union
select *
from a
join b
(a.clientid = b.id);
而第二条语句:
相当于
相当于是 A与 B1联表得到一个临时表T,再与 B2联表查询。
以上是 mysql ON子句中的OR和连续连接的效果不同? 的全部内容, 来源链接: utcz.com/a/25127.html