В моей базе данных SQLite, в каждой таблице есть столбец sync_id
.Я регулярно хочу получить максимум sync_id
для каждой таблицы.Вот что я попробовал в первую очередь:
SELECT
MAX(answer.sync_id),
MAX(community.sync_id),
MAX(question.sync_id),
MAX(topic.sync_id)
FROM
answer,
community,
question,
topic;
Этот запрос длился вечно, на самом деле я так и не дошел до него.
Вот что я попробовал дальше:
SELECT "answer" AS name, MAX(answer.sync_id) AS max_sync_id FROM answer
UNION SELECT "community" AS name, MAX(community.sync_id) AS max_sync_id FROM community
UNION SELECT "question" AS name, MAX(question.sync_id) AS max_sync_id FROM question
UNION SELECT "topic" AS name, MAX(topic.sync_id) AS max_sync_id FROM topic;
Этот невероятно быстрый и дает мне ожидаемые результаты.
У меня есть два вопроса по этому поводу:
- Почему эти два запроса так отличаются?Я предполагаю, что есть некоторая семантика SQL, которую я не получаю, какой-то неявный JOIN ...
- 1-й запрос возвращает максимумы в виде одной строки со столбцами, названными в честь таблиц.Второй запрос возвращает максимум 1 на строку, и мне пришлось создать столбец
name
, чтобы сохранить контекст.Есть ли способ получить набор результатов 1-го запроса со скоростью 2-го запроса?