标签:join cTime 笛卡尔 cName images 现象 解决 ft
今天使用join...on进行多表连接查询,使用的各个表中的id进行关联,但是数据是不对的,出现了笛卡尔积现象。
使用join相当于将表中数据进行了相乘,两个表中的数据相当于A表中字段个数乘以B表中字段个数。
查了相关帖子,使用join...on内连接就能解决,但是数据还是不对。
连接查询,如果on条件是非唯一字段,会出现笛卡尔积;如果on 条件是表的唯一字段,则不会出现笛卡尔积。
解决办法是:使用唯一字段进行等值连接。
select ft.cTime cTime,ft.images images,cm.id cId from (select five.cName cName,five.cTime cTime ,five.images images from A a where a.pId=#{pId} and a.fName=#{fName} and a.lName=#{lName} and a.rName=#{rName} and a.aName=#{aName}) ft join camr cm on ft.cName=cm.cName
之前用的三个表的id 进行连接,出现了笛卡尔积。后来取巧用了名字进行连接才消除笛卡尔积现象。
引用:在实际应用过程中通过关联表的最小粒度关联,可以避免产生笛卡尔积。这里的最小粒度可以理解为表中的唯一性约束的字段值.
标签:join,cTime,笛卡尔,cName,images,现象,解决,ft 来源: https://www.cnblogs.com/Jane-he/p/11820691.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。