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



我正在使用Python DB API使用postgresql。

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

我使用的表达式是

    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,
但实际上,"

路径"不会与"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 中的字符串文字。如果需要在别名中使用特殊字符,请使用双引号 ( " ),否则根本没有引号(没有别的)。

最新更新