SELECT STRAIGHT_JOIN s.*, date_part('epoch', s.date) AS unixdate,
date_part('epoch', s.expire) as expireunix, u.username, u.fullname,
u.photo, u.email, t.topic, t.imageurl
FROM stories s, users u, topics t WHERE (s.uid = u.uid) AND (s.tid = t.tid)
它说:
ERROR: syntax error at or near "s"
SQL state: 42601
Character: 23
我正在执行连接,但它给了我这个错误。如果我删除 STRAIGHT_JOIN
关键字,它执行时不会出现任何问题。但删除它有什么负面影响吗?
最佳答案
把它省略掉就可以了。 STRAIGHT_JOIN
是 MySQL 的增强功能,其工作方式类似于 INNER JOIN
,但 STRAIGHT_JOIN
强制首先读取左表。当优化器做出错误的表重新排序决策时,这是一种覆盖 MySQL 优化器的方法。
这一切与 PostgreSQL 无关。 STRAIGHT_JOIN
语法关键字不仅是 MySQL 特有的,而且它影响优化器内部的功能也是如此。每个品牌的数据库都有自己的优化器实现,并且每个品牌都有自己的特性。
您还可以使用标准 SQL-92 JOIN 语法,而不是过时的逗号样式连接。以下是我如何编写此查询:
SELECT s.*, DATE_PART('epoch', s.date) AS unixdate,
DATE_PART('epoch', s.expire) AS expireunix, u.username,
u.fullname, u.photo, u.email, t.topic, t.imageurl
FROM stories s
INNER JOIN users u ON (s.uid = u.uid)
INNER JOIN topics t ON (s.tid = t.tid);
关于PostgreSQL 无法识别 STRAIGHT_JOIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/931148/