当前位置:   article > 正文

数据库表联查出现的笛卡尔积_笛卡尔积产生的原因

笛卡尔积产生的原因

目录

一、笛卡尔积定义

二、笛卡尔积出现的原因

三、避免


一、笛卡尔积定义

笛卡尔乘积是指在数学中,两个集合X和Y的笛卡尓积(Cartesian product),又称直积,表示为X*Y,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员  。

假设集合A={a, b},集合B={0, 1, 2},则两个集合的笛卡尔积为{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}。

二、笛卡尔积出现的原因

比如我们有两张表user和school

  1. SELECT
  2. a.user_id,
  3. b.school_id
  4. FROM
  5. `user` a
  6. INNER JOIN school b ON a.area_id = b.area_id
  7. WHERE
  8. a.area_id = 'area1'

   

结果,就出现了笛卡尔积,是area_id=1的左表和area_id=1右表结果的乘积。原因是因为area_id=1条件不能使得其中一张表的查询结果唯一性,也就是说user表通过area_id=1和school表通过area_id=1查询出来的数据集都不唯一,联查的结果就是两个表结果的乘积。

三、避免

想要避免笛卡尔积的出现,就要使用条件使得联查的两张表中其中的一张表数据唯一。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/425276?site
推荐阅读
相关标签
  

闽ICP备14008679号