使用左连接查询时,我们期望左边的表有多少条数据,那就查出来多少条数据。
但有的时候却发现左边的表查出来多条数据,即产生了重复数据,出现笛卡尔积。这是为什么呢?
其实是因为,连接条件的字段在表中不是唯一主键,同一字段的同一值可以重复出现在多条数据,即A表连接B的字段,是一(A)对多(B)的关系。
SQL语句
select odo.* from ord_delivery_order odo
left join ord_delivery_order_details odod
on odo.id = odod.delivery_order_id
执行结果
在表ord_delivery_order
的一条数据可能对于ord_delivery_order_details
表的多条数据,且以ord_delivery_order
表的ID
为关联字段,那么左连接使用该连接条件时则产生笛卡尔积,左边表重复出现多次。
解决办法:
改为
join
使用
group by