sql用inner join内关联查询有多条记录一样只取一条?

2024-12-03 12:22:18
推荐回答(2个)
回答1:

级联查询的时候,主表和从表有一样的字段名的时候,在mysql上命令查询是没问题的。但在mybatis中主从表需要为相同字段名设置别名,设置了别名就OK了。

解决办法:

1.一对多不能用Association,要用Collection:根据经验,使用association这个元素很容易出错,建议在resultMap中先换一种写法,不要用association。

2.修改测试一下,如果成功的话,就基本可以去顶是association的问题了,之后查一下association详细资料,应该能解决。如果不是association的问题,就调查一下配置文件等等,总能够解决的。

3.resultMap配置有问题:发现问题的关键在于resultMap中如果不定义类似主键之类的能够区分每一条结果集的字段的话,会引起后面一条数据覆盖前面一条数据的现象。

回答2:

SELECT MIN(B.flow_id),A.item_ID FROM Test_Table A INNER JOIN Test_Table B ON A.Flow_ID!=B.Flow_ID AND A.Item_ID=B.Item_ID WHERE A.def_sup_flag=1 GROUP BY A.item_ID
--应该是这样写吧

--不过我觉得你是要实现的功能是不是,def_sup_flag等于1,如果item_id相同就取第一条记录
SELECT T.* FROM Test_Table T 
INNER JOIN (
    SELECT MIN(flow_id) flow_id FROM Test_Table 
    WHERE def_sup_flag=1 GROUP BY item_id) T2 
    ON T.flow_id=T2.flow_id