imyLove7 2020-04-23 20:23 采纳率: 0%
浏览 193

Mybatis 多表连接查询 SQL99标准报错:用的是selectOne,找到结果大于1

org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 3

sql99标准的查询语句,在SQLyog中执行该语句,可以查出来三条记录,因为该电影包含了三个标签。

<select id="findById" parameterType="java.lang.Integer" resultMap="movieMap">
        SELECT m.id mid,title,published_time,length,director,scriptwriter,performer,cover_path,resource_path,info_intro,is_recommend,is_comment,likes,plays,reviews,t.id tid,t.name tname,d.id did,d.name dname
        FROM t_movie m
        inner join ct_movie_tag mt on m.id=mt.movie_id
        inner join t_tag t On mt.tag_id = t.id
        inner join t_district d On m.district_id = d.id
        WHERE m.id = #{id};
</select>

我把这个查询语句改成sql92标准之后,可以正确的查询。

<select id="findById" parameterType="java.lang.Integer" resultMap="movieMap">
        SELECT m.id id,title,published_time,length,director,scriptwriter,performer,cover_path,resource_path,info_intro,is_recommend,is_comment,likes,plays,reviews,
        t.id tid,t.name tname,d.id did,d.name dname
        FROM t_tag t,ct_movie_tag mt,t_movie m,t_district d
        where m.id = mt.movie_id
        and mt.tag_id = t.id
        and m.district_id = d.id
        and m.id = #{id};
    </select>
  • 写回答

1条回答 默认 最新

  • 憧憬blog 2023-03-15 01:04
    关注

    这个错误是因为 Mybatis 的 selectOne 方法期望查询结果只有一条,但是实际上查询到了三条结果,因此抛出了 TooManyResultsException 异常。这个问题通常是因为 SQL 查询的逻辑有问题,导致返回结果不符合预期。

    你提到将查询语句改为 SQL92 标准后可以正确查询,这可能是因为 SQL92 标准处理多表查询的方式与 SQL99 标准不同,导致查询结果不同。

    建议检查 SQL99 标准的查询语句逻辑,确认其能正确地返回预期结果。可能需要对查询语句进行调整或优化,以确保其逻辑正确。另外,也可以考虑使用 Mybatis 的 selectList 方法来处理返回多条结果的情况。

    评论

报告相同问题?

悬赏问题

  • ¥60 db2move nlzxams import 导出db2备份数据报错
  • ¥15 关于#python#的问题:全文总结功能咨询
  • ¥15 俄罗斯方块中无法同时消除多个满行
  • ¥15 c#转安卓 java html
  • ¥15 os.listdir文件路径找不到
  • ¥15 使用gojs3.0,如何在nodeDataArray设置好text的位置,再go.TextBlock alignment中进行相应的改变
  • ¥15 psfusion图像融合指标很低
  • ¥15 银河麒麟linux系统如何修改/etc/hosts权限为777
  • ¥50 医院HIS系统代码、逻辑学习
  • ¥30 docker离线安装mysql报错,如何解决?