1

我有一些表都有一个名为 的字段created_at,这是一个时间戳,表示插入行的时间。

现在我使用 mybatis 3 作为持久层,用join.

看看我期望得到所有问题及其答案的简单 sql:

<select id="selectQuestionsWithAnswers">
      select q.*, a.* from questions as q left inner join answers as a
             on q.id=a.id
      order by a.created_at desc
</select>

但我发现,因为questionsandanswers都有 field created_at,如果我写select q.*, a.*,结果集中有 2created_at个,第二个被忽略。所以答案的created_at值为questions,这是不正确的。

为了避免这种情况,我找到了两种方法,但都不好:

  1. 修改每个表的字段名称,确保它们不相同。例如:questions.created_at-> questions.q_created_atanswers.created_at-> answers.a_created_at

    这不好,因为有很多这样的字段,如,,,,它id使数据库难以阅读和维护以更改这些名称nametitleupdated_at

  2. 修改 SQL。更改sql中的字段名称,例如:

    select q.id as q_id, q.title as q_title, ..., q.created_at as q_created_at, 
           a.id as a_id, a.content as a_content, ..., a.created_at as a_created_at
    from questions as q left inner join answers as a
           on q.id=a.id
    order by a.created_at desc
    

    这不好,因为我需要更改 SQL 中的每个字段名称,它变得非常长且难以阅读,并且每次编写这样的 SQL 都非常痛苦。

我是mybatis新手,有没有更好的解决这个问题的方法?

4

1 回答 1

2

关于什么

<select id="selectQuestionsWithAnswers">
      select q.*, a.*, q.created_at as qtime, a.created_at as atime from questions as q left inner join answers as a
             on q.id=a.id
      order by atime desc
</select>

现在你将有你的atime时间qtime

于 2011-08-15T05:23:10.363 回答