#sql #amazon-web-services #amazon-redshift
Вопрос:
Я пытаюсь объединить две разные таблицы с помощью функции слева — для справки (https://docs.aws.amazon.com/redshift/latest/dg/r_LEFT.html) И это выдает ошибку с надписью «недопустимая операция», я хотел бы, чтобы сообщение об ошибке было немного более полезным. Если я удалю левую функцию, то она будет работать, но мне нужно заставить ее работать с функцией, так как я не видел никаких ограничений в документах.. Я не уверен, почему это не работает с функцией, так как есть какие-либо советы о том, как ее решить?
select id from state
LEFT JOIN city c ON lower(left(c.segmentation_name::text, '-4'::integer)) = lower(state.name::text)
Комментарии:
1. Пожалуйста, предоставьте примеры данных, желаемые результаты и объяснение того, что вы пытаетесь сделать.
2. Просто спрашиваю — зачем кастинг
text
? это не тот тип, который обычно используется — он предназначен для устаревшей поддержки таблиц Postgres с узлами-лидерами. Кроме того, странно писать «-4»:: целое число — просто напишите -4. Кроме того, как говорится в ответе, вы передаете здесь положительное значение, а не отрицательное.
Ответ №1:
Если вам нужны все символы, кроме последних четырех, используйте:
from state s left join
city c
on substring(lower(c.segmentation_name::text), 1, len(c.segmentation_name::text) - 4) = lower(state.name::text)
Преобразования text
выглядят действительно неловко. Возможно, этого достаточно:
from state s left join
city c
on substring(lower(c.segmentation_name), 1, len(c.segmentation_name) - 4) = lower(state.name)
Комментарии:
1. спасибо, это сработало. Я поддержал ответ.
Ответ №2:
left поддерживает только положительные целые числа в качестве второго аргумента. Попробуй right(c.segmentation_name::text, 4)
вместо этого.