首页 > 解决方案 > WHERE 不能在 Postgresql 中使用 INNER JOIN

问题描述

当我运行时:

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

它给出了错误:

错误:“WHERE”处或附近的语法错误

据我了解,在这种情况下 WHERE 是正确的用法。

任何输入都会有所帮助。

标签: sqlpostgresqljoin

解决方案


据我了解,在这种情况下 WHERE 是正确的用法。

不,你误解了这一点。

WHERE 子句出现所有 JOIN 子句之后,它永远不能成为 JOIN条件的一部分。

JOIN 的一般格式是:

table_b JOIN table_b ON <some_condition>

那部分是WHERE不允许的。唯一的变化是不同类型的连接(left join, full join, right join)。连接始终遵循 FROM 子句。只有完全指定了所有连接(包括连接条件 using ON),您才能开始编写WHERE子句。

暂时忽略子查询和派生表,您可以将FROM子句想象为“一件大事”,并且只有当它完成时才允许编写WHERE子句。

也许您正在考虑古老、过时且脆弱的隐式连接:

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

但是JOIN在子句中使用带有连接条件的显式运算符ON是更好的编码风格。不要习惯于过时和古老的隐式连接。


推荐阅读