Синтаксическая ошибка при использовании подстроки в выражении соединения с PostgreSQL

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

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

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

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

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

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

1 ответ

Решение

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

У вас тоже есть шальные FROM там.

Пытаться:

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

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

Другие вопросы по тегам