как использовать замену в левом операторе соединения - PullRequest
0 голосов
/ 05 марта 2020

У меня есть две таблицы, в одной из которых есть поле со строками типа «1111AAA», в другой - то же поле, но с такой структурой «1111 AAA». Я хочу заменить пустое пространство на '', но у меня есть ошибка около ON левого соединения.

Я поставил код ниже:

select idticket, bt.matricula, bv.vehicle
from b_ticket bt
left JOIN b_vehicle bv ON REPLACE(bv.matricula, ' ', '') ilike ON REPLACE(bt.matricula, ' ', '')
where date_start >= '2019/01/01/'
and date_end <= '2020/01/01'

Я не могу изменить значения любой из двух таблиц. И я также пробую функцию TRIM, но она не работает, потому что она удаляет пробелы в начале и конце строки, а не между словами.

Есть идеи?

Спасибо!

Сообщение об ошибке: ОШИБКА: синтаксическая ошибка рядом с «ON» ЛИНИЯ 3: ... bv ON REPLACE (bv.matricula, '', '') ilike ON REPLACE ...

Ответы [ 2 ]

1 голос
/ 05 марта 2020

Это недействительно SQL:

left JOIN b_vehicle bv 
    ON REPLACE(bv.matricula, ' ', '') ilike ON REPLACE(bt.matricula, ' ', '')

Должен быть только один ON на JOIN. Предположительно, вы хотите:

left JOIN b_vehicle bv 
    ON REPLACE(bv.matricula, ' ', '') ilike REPLACE(bt.matricula, ' ', '')
1 голос
/ 05 марта 2020

Скорее всего, у вас есть постороннее ключевое слово ON в вашем предложении JOIN:

SELECT
    idticket, bt.matricula, bv.vehicle
FROM
    b_ticket AS bt LEFT JOIN b_vehicle AS bv
        ON REPLACE(bv.matricula, ' ', '') ILIKE REPLACE(bt.matricula, ' ', '')
WHERE
    date_start >= '2019/01/01/' AND date_end <= '2020/01/01';

Поскольку состояние ошибки: предикат должен быть любым допустимым логическим выражением, но он не может иметь ON ключевое слово в нем.

...