Двойные имена полей в разных таблицах усложняют запрос `SELECT` в mybatis
У меня есть несколько таблиц, которые все имеют поле с именем 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>
Но я нашел, так как questions
а также answers
у обоих есть поле created_at
и если я напишу select q.*, a.*
Есть 2 created_at
в наборе результатов, а второй игнорируется. Так что ответы будут иметь created_at
значение как questions
это не правильно.
Чтобы избежать этого, я нашел 2 способа, но оба не хороши:
Измените имена полей каждой таблицы, убедитесь, что они не совпадают. Например:
questions.created_at
->questions.q_created_at
,answers.created_at
->answers.a_created_at
,Это не хорошо, потому что есть много таких полей, как
id
,name
,title
,updated_at
, это делает базу данных трудно читать и поддерживать, чтобы изменить эти именаИзменить 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, есть ли лучшее решение для этой проблемы?
1 ответ
Как насчет
<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