Почему не работает фильтрация в "left join"?
Есть рабочий код, который выбирает список сообщений и процитированные сообщения (если есть):
select messages.*, m2.text quoted_text
from messages
left join messages m2 on messages.quoted_message_id = m2.id;
Код работает как нужно, но есть нюанс....
Код выше всегда ищет в таблице процитированное сообщение, даже если quoted_message_id
равен null
. А это, как по мне, странно.
Тогда я добавила условие messages.quoted_message_id IS NOT NULL
вот так:
select messages.*, m2.text quoted_text
from messages
left join messages m2 on messages.quoted_message_id IS NOT NULL and messages.quoted_message_id = m2.id;
Но это не помогло. Постгря всё равно ищет процитированные сообщения и ей плевать на фильтр. Что я делаю не так? И как решить такую задачу или не в ту сторону вообще мыслю и что-то делаю?