左连接笛卡尔积

2020-10-15  本文已影响0人  帮我的鸵鸟盖个章

使用左连接查询时,我们期望左边的表有多少条数据,那就查出来多少条数据。

但有的时候却发现左边的表查出来多条数据,即产生了重复数据,出现笛卡尔积。这是为什么呢?

其实是因为,连接条件的字段在表中不是唯一主键,同一字段的同一值可以重复出现在多条数据,即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

执行结果

左连接笛卡尔积.png

在表ord_delivery_order的一条数据可能对于ord_delivery_order_details表的多条数据,且以ord_delivery_order表的ID为关联字段,那么左连接使用该连接条件时则产生笛卡尔积,左边表重复出现多次。

解决办法:

  1. 改为 join

  2. 使用 group by

上一篇 下一篇

猜你喜欢

热点阅读