消除笛卡尔乘积最根本的原因不是在于连接,而是在于唯一ID,就像学号,一个学生就只有一个学号,学号就是这个学生的唯一标识码。
左连接只是以左边的表为基准,左边的ID和右边ID都是唯一,就不会产生笛卡尔现象,如果右边有两个ID对应左边一个ID,就算你是左连接,一样会产生1对多的现象。
例子:
SELECT * from test.employee ORDER BY id
SELECT * from test.tmp2 ORDER BY id
SELECT * from test.employee a
LEFT JOIN (SELECT * from test.tmp2 ) b
on a.id=b.id
ORDER by a.id
因为左右两张表都有id为1的记录,所以会出现上图所示的笛卡尔乘机现象。