ГДЕ не работает с INNER JOIN в Postgresql - PullRequest
0 голосов
/ 01 марта 2020

Когда я запускаю:

SELECT * from actor inner join film_actor fa ON actor.actor_id = fa.actor_id

Я получаю результаты.

Но работает:

SELECT * from actor inner join film_actor fa WHERE actor.actor_id = fa.actor_id

Выдает ошибку:

ОШИБКА: синтаксическая ошибка в или около "ГДЕ"

Насколько я понимаю, ГДЕ правильное использование в этом случае.

Любой ввод поможет.

Ответы [ 2 ]

1 голос
/ 01 марта 2020

Насколько я понимаю, ГДЕ правильное использование в этом случае.

Нет, вы неправильно это поняли.

Предложение WHERE приходит после всех предложений JOIN, оно никогда не может быть частью условия JOIN .

Общий формат JOIN:

table_b JOIN table_b ON <some_condition>

, в этой части WHERE не разрешено. Единственное изменение - это разные типы соединений (left join, full join, right join). Соединения всегда следуют предложению FROM. Только если все объединения полностью определены (, включая условие объединения, используя ON), вы можете начать писать предложение WHERE.

Игнорируя подзапросы и производные таблицы на данный момент, вы можете представить предложение FROM как "одну большую вещь", и только если это выполнено, вы не можете написать предложение WHERE.

Возможно, вы думаете о древних, устаревших и неявных соединениях fr agile:

SELECT * 
from actor, 
     film_actor fa 
WHERE actor.actor_id = fa.actor_id

Но использование явного оператора JOIN с условием соединения в предложении ON гораздо лучший стиль кодирования. Не привыкать к устаревшим и древним скрытым соединениям.

0 голосов
/ 01 марта 2020

Для этого стиля синтаксиса вы хотите

SELECT * from actor, film_actor fa WHERE actor.actor_id = fa.actor_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...