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

时间:2018-12-20 20:19:10

标签: sql postgresql join postgresql-9.5 python-db-api

我正在使用Python DB 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,

但实际上,“路径”与“子弹”不匹配,但是在适当的位置有子字符串。

我尝试使用方括号,在“ my_substr”之前使用“ as”,但是都给出相同的语法错误。

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

1 个答案:

答案 0 :(得分:2)

除了SELECT的列列表之外,您不能也不需要在表达式中为列表达式加上别名。

您那里也有流浪FROM

尝试:

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

最后,如果您使用别名,请不要将它们括在单引号(')中,它们是用于SQL中的字符串文字。如果您需要在别名中包含特殊字符,请使用双引号("),否则请完全不要使用引号。