Я пытаюсь выбрать 2 столбца из подзапроса в следующем запросе, но не могу это сделать. Попытался создать таблицу псевдонимов, но все еще не мог получить их.
SELECT
DISTINCT petid,
userid,
(SELECT MAX(comDate) FROM comments WHERE petid=pet.id) AS lastComDate,
(SELECT userid FROM comments WHERE petid=pet.id ORDER BY id DESC LIMIT 1) AS lastPosterID
FROM
pet LEFT JOIN comments ON pet.id = comments.petid
WHERE
userid='ABC' AND
deviceID!='ABC' AND
comDate>=DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 2 MONTH);
По сути, я пытаюсь получить lastComDate
& lastPosterID
из той же строки - строки, которая является последней в комментариях для конкретного питомца. Пожалуйста, предложите, как я могу получить их эффективным способом.
Приведенный выше запрос работает, но кажется излишним, так как одна и та же строка выбирается дважды. Более того, ORDER BY
предложение значительно медленнее, чем агрегатная функция - как я обнаружил при профилировании запроса. Таким образом, решение, избегающее сортировки, будет оценено.
mysql
performance
select
subquery
BufferStack
источник
источник
deviceID
изpets
таблицы - это означает, что я не получаю домашних животных, которые представлены самим «ABC».Ответы:
Вы также можете вытащить свой подзапрос во временную таблицу, если производительность снизится где-нибудь в будущем.
источник
NULL
для обоихlastComDate
иlastPosterId
для всех записей.Учитывая, что ваши таблицы выглядят так:
Этот запрос должен помочь:
источник