首页 > 解决方案 > 在 PostgreSQL 的连接表达式中使用子字符串时出现语法错误

问题描述

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

但事实上,'path' 不会匹配 'slug',但它会匹配子字符串。

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

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

标签: sqlpostgresqljoinpostgresql-9.5python-db-api

解决方案


除了SELECT.

你那里也有一只流浪狗FROM

尝试:

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

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


推荐阅读