синтаксическая ошибка при использовании подстроки в выражении соединения с PostgreSQL - PullRequest
0 голосов
/ 20 декабря 2018

Я работаю с postgresql, используя API Python DB.

Используемое выражение подстроки прекрасно работает само по себе, но когда я помещаю его в контекст команды соединения, я получаю синтаксическую ошибку и не могу найти решение этой проблемы в любомучебник или другой вопрос.

Я использую выражение

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

, и оно дает результат

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

, который я и хочу.(Он обрезает / article / по этому пути.)

Контекст, в который я хочу поместить его, является выражением соединения, например:

    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', но с подстрокой на месте это будет.

У меня естьпробовал использовать скобки, используя «as» перед «my_substr», но все выдают одинаковую синтаксическую ошибку.

Как мне создать это выражение с правильным синтаксисом?

1 Ответ

0 голосов
/ 20 декабря 2018

Вы не можете и не должны псевдонимом выражения столбца в выражениях, отличных от списка столбцов для SELECT.

У вас также есть паразит FROM.

Попробуйте:

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

И, наконец, если вы используете псевдонимы, не заключайте их в одинарные кавычки ('), они предназначены для строковых литералов в SQL.Если вам нужно, чтобы в псевдониме были специальные символы, используйте двойные кавычки ("), в противном случае вообще не используйте кавычки (и ничего больше).

...