今天使用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 进行连接,出现了笛卡尔积。后来取巧用了名字进行连接才消除笛卡尔积现象。