PostgreSQL 无法识别 STRAIGHT_JOIN

标签 postgresql

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/

相关文章:

sql - 删除重复的 SQL 连接结果

c# - 批量 C# 数据表到 postgresql 表

sql - Postgresql:如何使用随机字符串高效地填充 1000 万行表

sql - 即使在创建索引时 postgres 的性能也很慢

database - 在 PostgreSQL 中难以将 CTE 与窗口 PARTITION BY 和字符串模式匹配结合使用

sql - PostgreSQL 中按数组重叠分组

laravel - Laravel 的 eloquent 查询和相同的关联 SQL 查询(使用 toSql() 方法获得)之间的不同结果

sql - 在 golang 中处理插入到具有不同和大量列的数据库

postgresql - Postgres 相当于 Sql Servers @@DBTS

postgresql - Heroku 上的语法错误,但本地服务器上没有(与 postgresql 相关?)