【问题标题】:Incorrect syntax error "as" Postgres不正确的语法错误“as”Postgres
【发布时间】:2015-01-30 16:52:51
【问题描述】:

我是 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

在执行时会出现错误,因为“as”附近的语法不正确

什么错误

【问题讨论】:

  • 这不是 Postgres 语法。 datediff() 不是 Postgres 函数。

标签: sql postgresql


【解决方案1】:

这应该适合你:

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 关键字之后

【讨论】:

  • 它给出了这个错误ERROR: relation "cust" does not exist
  • @HareRamaHareKrishna 您是在应用程序中还是直接在 Postgres 命令行中测试了这段代码?我相信这不是 SQL 代码的问题,而是您的应用程序中的某些问题。 (表参考或其他东西) - 做一个简单的网络搜索(这只是我发现的一个例子:Possible answer
  • @RaduGheorghiu 我怀疑他没有将表名从“cust”更改为“cust_final_1”。无论如何 - 我不认为 datediff 是有效的 Postgresql 语法。
【解决方案2】:

不确定您的列是什么意思,但这里是。我假设“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,这意味着丢失的记录不会做任何事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多