左连接(table1,table2)和左连接table1左连接table2之间有什么区别

时间:2017-02-09 08:01:03

标签: mysql sql database

两个sql查询有什么区别?

select * from a
left join (b, c)
on a.id = b.uid and a.id = c.uid

select * from a
left join b on a.id = b.uid
left join c on a.id = c.uid

2 个答案:

答案 0 :(得分:1)

让我们得到这些数据:

A       B        C
id      uid      uid
--      ---      ---
 1        1        2
 2

首先,第二个查询:

select * from a
left join b on a.id = b.uid
left join c on a.id = c.uid

 ID UID  UID
 -- ---- ----
  1    1 NULL
  2 NULL    2

这应该不足为奇 - 第二列是从b加入的,b中没有数据,NULL被使用(外连接);第三列的行为相同,仅适用于c

第一个查询,用CROSS JOIN(相当于)重写为符合ANSI标准:

select * from a
left join (b CROSS JOIN c)
on a.id = b.uid and a.id = c.uid

 ID UID  UID
 -- ---- ----
  2 NULL NULL
  1 NULL NULL

为什么所有NULL都是?

首先,执行CROSS JOIN,但这会导致结果集只有一行:

b.UID   c.UID
-----   -----
    1       2

然后,执行左连接,但交叉连接的结果中没有对uidb具有相同c的行,因此没有行可以匹配a中的任一行。

答案 1 :(得分:0)

 select * from a
 left join (b, c)
 on a.id = b.uid and a.id = c.uid

相当于

select * from a 
left join (b cross join c)
on (a.id = b.uid and a.id = c.uid)

在这里您可以找到详细信息 https://dev.mysql.com/doc/refman/5.7/en/join.html