在 PostgreSQL 的连接表达式中使用子字符串时出现语法错误

syntax error when using substring in a join expression with PostgreSQL

我正在使用 Python 数据库 API 来处理 postgresql。

我使用的子字符串表达式单独使用时工作正常,但是当我将它放在连接命令的上下文中时,出现语法错误,而且我在任何教程中都找不到解决此问题的方法或其他问题。

我使用的表达方式是

    select substring(path, 10, 28) 'my_substr' from log limit 3") 

它给出了结果

    [('',), ('candidate-is-jerk',), ('goats-eat-googles',)]

这就是我想要的。 (它删除了这条路径中的 /articles/。)

我想放置它的上下文是一个连接表达式,像这样:

    select articles.author, articles.slug
    from articles 
    join log on articles.slug = substring(path, 10, 28) 'my_substr'
    from log 

如果我不需要子字符串,表达式将是

    join log on articles.slug = log.path,

但事实上,'path' 不会匹配 'slug',但在适当的位置它会匹配。

我试过使用括号,在 'my_substr' 之前使用 "as",但都给出相同的语法错误。

如何使用正确的语法创建此表达式?

除了 SELECT.

的列列表之外,您不能也不需要在表达式中为列表达式添加别名

你那里还有一只流浪狗 FROM

尝试:

SELECT articles.author,
       articles.slug
       FROM articles 
            INNER JOIN log
                       ON articles.slug = substring(log.path, 10, 28);

最后,如果您使用别名,请不要将它们括在单引号 (') 中,这些用于 SQL 中的字符串文字。如果您需要在别名中包含特殊字符,请使用双引号 ("),否则根本没有引号(也没有其他任何内容)。