Очень сложный SQL-запрос

-5

У меня сложный запрос, и я не могу получить правильный ответ.
Есть 3 таблицы:

contact (pk as INT, имя как VARCHAR,...)
session (pk as INT, контакт как INT,...)
сообщение (pk как INT, сеанс как INT,...)

session.contact указывает на contact.pk. И message.session для session.pk.
Когда session.contact равно нулю, тогда для этой строки нет контакта. contact.pk никогда не равен нулю.

Теперь я хочу получить все имена конкретного сообщения. Моя попытка:

SELECT message.pk, contact.name FROM message, session, contact WHERE message.session = session.pk И session.contact = contact.pk

Но я не получил правильное количество возвращаемых строк. Это должно быть 2459, есть 2075.

спросил(а) 2020-03-26T13:35:21+03:00 2 месяца назад
1
Решение
63

Во-первых, как вы знаете, что это правильное количество строк?

Во-вторых, вы должны использовать правильный синтаксис JOIN подобный приведенному ниже:

SELECT message.pk, contact.name
FROM message m
LEFT JOIN session s
on m.session = s.pk
LEFT JOIN contact c
on s.contact = c.pk

ответил(а) 2020-03-26T13:46:53.388661+03:00 2 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема