【问题标题】:update query with case statement giving missing keyword error使用 case 语句更新查询,给出缺少关键字错误
【发布时间】:2014-02-21 17:08:35
【问题描述】:

有 2 个表 INFOADDR
ADDR 有 4 列 ID, LINE_1_ADDR, LINE_2_ADDR, TEMP_ADDR_ID INFO 有 4 列 ID, FIRST_NAME, LAST_NAME, ADDR_ID 每当有INFO.ADDR_IDADDR.TEMP_ADDR_ID 匹配时,我想用ADDR.ID 替换INFO.ADDR_ID 中的数据

我有以下错误的更新查询

ORA-00905:缺少关键字

下面是我的代码:

UPDATE INFO SET INFO.ADDR_ID = (CASE
WHEN ADDR.TEMP_ADDR_ID = INFO.ADDR_ID
THEN INFO.ADDR_ID = ADDR.ID
END);

我是涉及案例的 SQL 查询的新手,不知道哪里错了。请帮忙!

谢谢

【问题讨论】:

  • 是ADDR其他表吗?
  • Yes ADDR 是另一个表。

标签: mysql sql oracle sql-update case


【解决方案1】:

如果你使用 MYSQL

 UPDATE INFO 
 INNER JOIN ADRR ON ADDR.TEMP_ADDR_ID = INFO.ADDR_ID
 SET INFO.ADDR_ID = ADDR.ID

如果你使用 ORACLE

使用这个

UPDATE INFO SET INFO.ADDR_ID = (SELECT ADRR.ID
                                FROM ADRR  
                                WHERE ADDR.TEMP_ADDR_ID = INFO.ADDR_ID)

【讨论】:

  • 我不太确定,但UPDATE 期待SETJOIN 之前。它给出了一个错误,缺少 SET 关键字!
  • 我在 TOAD 上试过了,它似乎给出了错误,ORA-00971: missing SET keyword
【解决方案2】:

编辑: 获得更多信息后,echo_Me 的方法是更新的正确方法。

UPDATE INFO 
JOIN ADDR ON /*your Join condition*/
SET INFO.ADDR_ID = ADDR.ID

【讨论】:

  • 我在尝试上述代码后收到此错误。谢谢。 ORA-00904: "ADDR"."ID": invalid identifier
猜你喜欢
  • 1970-01-01
  • 2023-03-20
  • 2015-04-17
  • 1970-01-01
  • 1970-01-01
  • 2018-01-12
  • 2020-01-27
  • 2020-08-14
  • 1970-01-01
相关资源
最近更新 更多