Синтаксическая ошибка при использовании подстроки в выражении соединения с 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. Если вам нужно иметь специальные символы в псевдониме, используйте двойные кавычки ("
), в противном случае никаких кавычек (и ничего больше) вообще.