Mybatis LEFT JOIN 多张相同的表

寂雨子 发布于 2016/05/30 09:42
阅读 2K+
收藏 1

是这样子的,我这里有一张表res_compare,里面有两个字段faceid和byfaceid,这两个值对应同一张表photo_face里的两条不同的记录,数据库持久层用的是mybatis,配置文件里的association和collection都做好了,但是就是取不出photo_face的第二条值,sql语句有点复杂,如下:查找的语句在第三句和第六句

<select id="selectCompareList" resultMap="compare">
		SELECT * FROM 
		((((((res_compare c 
                   LEFT JOIN photo_face p ON ( c.faceID = p.faceId)) 
		    LEFT JOIN msg_volunup v ON (p.faceId = v.faceID))
		      LEFT JOIN dg_userinfo d ON (d.UserID=v.userID))
		        LEFT JOIN photo_face p2 ON (p2.faceId=c.byFaceID )) 
		          LEFT JOIN msg_missing m ON(m.userid = p2.userid))
		            LEFT JOIN msg_tracing t ON (t.myuserid=p2.userid))
		              LEFT JOIN dg_userinfo d2 ON (p2.userid=d2.UserID)
		           WHERE c.result='0'  ORDER BY c.id limit #{0},#{1}          
</select>





加载中
0
猪大宝
猪大宝

引用来自“猪大宝”的评论

别名,相同的字段你让他怎么给你显示,显示两个相同字段?
SELECT c.faceID,p.faceid pid,p.fileurl purl,p2.faceid p2id,p2.fileurl p2url from
  res_compare c LEFT JOIN photo_face p ON c.faceID = p.faceId
LEFT JOIN photo_face p2 ON p2.faceId=c.byFaceID
                   WHERE c.result='0'
直接在工具里边运行取不到值?
寂雨子
寂雨子
对。。配置两个Photo_face然后用别名的确可以了~~~
0
寂雨子
寂雨子
补充下,第一个photo_face是可以取出值来的
0
猪大宝
猪大宝
别名,相同的字段你让他怎么给你显示,显示两个相同字段?
寂雨子
寂雨子
尝试了别名还是没作用,改成了 SELECT p.faceid pid,p.fileurl purl,p2.faceid p2id,p2.fileurl p2url from .......
0
月生无界
月生无界

不明白你为什么写那么多括号,不需要括号,也是可以的,当然,这可能是个人习惯,就吐槽一下,其次,你关联一个表两次,那么相同的字段就会出现两次,结果就会显得很尴尬,直接改为left join photo_face p on c.faceID = p.faceId or c.byFaceId = p.faceId,完美解决

月生无界
月生无界
回复 @yoblue : 可以的吧,你主表的数据量就在那里,关联只是为了拿到跟多该条数据相关的内容,无论你左连接多少个表,大不了也就相当于多几个字段而已
寂雨子
寂雨子
我也明白这么多括号的确不适合密集恐惧症的人看到。。哈哈哈
寂雨子
寂雨子
哈哈,没有。写那么多括号是因为考虑之后on后面也许还需要加条件,另外...我这边的表关系比较复杂,不能像你那样写的。。
0
祝网
祝网
怎么现在的人都喜欢用左连接、右连接,内连接
月生无界
月生无界
不连接怎么多表查询,直接把所有数据都设置成一个表?一对多怎么办,多对多怎么办!!
返回顶部
顶部