赞
踩
目录
笛卡尔乘积是指在数学中,两个集合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
- SELECT
- a.user_id,
- b.school_id
- FROM
- `user` a
- INNER JOIN school b ON a.area_id = b.area_id
- WHERE
- a.area_id = 'area1'
结果,就出现了笛卡尔积,是area_id=1的左表和area_id=1右表结果的乘积。原因是因为area_id=1条件不能使得其中一张表的查询结果唯一性,也就是说user表通过area_id=1和school表通过area_id=1查询出来的数据集都不唯一,联查的结果就是两个表结果的乘积。
想要避免笛卡尔积的出现,就要使用条件使得联查的两张表中其中的一张表数据唯一。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。