LEFT JOIN关联出现笛卡尔积

消除笛卡尔乘积最根本的原因不是在于连接,而是在于唯一ID,就像学号,一个学生就只有一个学号,学号就是这个学生的唯一标识码。
左连接只是以左边的表为基准,左边的ID和右边ID都是唯一,就不会产生笛卡尔现象,如果右边有两个ID对应左边一个ID,就算你是左连接,一样会产生1对多的现象。

例子:

SELECT * from test.employee  ORDER BY id

LEFT JOIN关联出现笛卡尔积_第1张图片

SELECT * from test.tmp2 ORDER BY id

 LEFT JOIN关联出现笛卡尔积_第2张图片

SELECT * from test.employee a
LEFT JOIN (SELECT * from test.tmp2 ) b
on a.id=b.id
ORDER by a.id

 LEFT JOIN关联出现笛卡尔积_第3张图片

因为左右两张表都有id为1的记录,所以会出现上图所示的笛卡尔乘机现象。

你可能感兴趣的:(SQL)