Неправильная синтаксическая ошибка как Postgres

Я postgres, вот мой запрос

update cust_final_1 as cust set cust.enure_days=datediff(day,1date,current_date)
from  card as card join  cust_final_1 as cust on cust.cust_id=card.cardh_cust_id
left join bt_time as tim on card.cardh_act_dt=tim.time_id

при выполнении выдает ошибку как неправильный синтаксис рядом с "как"

Что за ошибка


person Hare Rama Hare Krishna    schedule 02.12.2014    source источник
comment
Это не синтаксис Postgres. datediff() не является функцией Postgres.   -  person Gordon Linoff    schedule 02.12.2014


Ответы (2)


Это должно сработать для вас:

UPDATE cust
SET cust.enure_days = datediff(day, 1 DATE, CURRENT_DATE)
FROM card AS card
INNER JOIN cust_final_1 AS cust
    ON cust.cust_id = card.cardh_cust_id
LEFT JOIN bt_time AS tim
    ON card.cardh_act_dt = tim.time_id

Просто замените имя таблицы псевдонимом сразу после ключевого слова UPDATE.

person Radu Gheorghiu    schedule 02.12.2014
comment
это дало эту ошибку ERROR: relation "cust" does not exist - person Hare Rama Hare Krishna; 02.12.2014
comment
@HareRamaHareKrishna Вы тестировали этот код в своем приложении или непосредственно в командной строке Postgres? Я считаю, что это не проблема с кодом SQL, а с чем-то в вашем приложении. (ссылки на таблицы или что-то еще) - выполните простой поиск в Интернете (это всего лишь пример того, что я нашел: Возможный ответ) - person Radu Gheorghiu; 02.12.2014
comment
@RaduGheorghiu Я подозреваю, что он не изменил имя таблицы с cust на cust_final_1. Во всяком случае, я не думаю, что datediff является допустимым синтаксисом Postgresql. - person mlinth; 02.12.2014

Не уверен, что означают ваши столбцы, но вот. Я предполагаю, что "1date" - это дата, с которой вы хотите получить разницу.

UPDATE cust_final_1 
SET enure_days=current_date - "1date" -- datediff is not postgresql, just subtract if they are both dates
FROM card 
left join bt_time as tim on card.cardh_act_dt=tim.time_id
WHERE cust_final_1.cust_id=card.cardh_cust_id

Я также с подозрением отношусь к левому соединению. Зачем это делать? Если в bt_time нет соответствующей записи, а в этой таблице есть «1date», вы обновляете запись со значением NULL. Я бы предложил использовать INNER JOIN, что означает, что отсутствующие записи ничего не делают.

person mlinth    schedule 02.12.2014