2015-04-30 2 views
-1

Я новичок в SQL, я в настоящее время пытается использовать предложения HAVING, но он не работает ..Имея пункт не работает

У меня есть две таблицы:

  1. TChat: tchat table

  2. tchat_message:

tchat_message table

Поэтому я хочу получать последние сообщения от пользователей.

Первое: Я присоединяюсь к таблицам: `

select user_id, user_message, max(date_message) 
from tchat 
inner join tchat_message on tchat.id=tchat_message.user_id 

здесь это нормально.

Второе: я использую, имеющий пункт:

select user_id, user_message, max(date_message) 
from tchat 
inner join tchat_message on tchat.id=tchat_message.user_id 
group by user_id 
having max(date_message) = date_message` 

А вот у меня есть ошибка, которая говорит:

Неизвестный столбца 'date_message' в 'имеющей п'

У кого-нибудь есть идея?

ответ

2

Вы неправильно используете предложение having. Далее ближе к тому, что вы хотите:

select tm.user_id, tm.user_message, tm.date_message 
from tchat t inner join 
    tchat_message tm 
    on t.id = tm.user_id inner join 
    (select user_id, max(date_message) as maxdm 
     from tchat_message 
     group by user_id 
    ) tmm 
    on tmm.user_id = tm.user_id and tmm.maxdm = tm.date_message; 

Вам не нужно group by во внешнем запросе. Вам также не нужна таблица tchat (я ее оставил, если у вас есть дополнительные столбцы в select из этой таблицы).

+0

Нет ничего проще? –

+1

@ Mr.Smith67 См. Другие методы в дублированном вопросе. – Barmar

+0

@GordonLinoff: иногда необходимо присоединяться к таблицам, даже если вы не выбираете столбцы из него, если, например, вы хотите включить записи, имеющие совпадение в другой таблице. – mstbaum

Смежные вопросы