【问题标题】:SQL JOIN with UPDATESQL JOIN 与 UPDATE
【发布时间】:2016-11-21 16:21:23
【问题描述】:

我有两个表 TBL_TEST1 和 TBL_TEST2,两个表中都有 DISTRICT 和 NAME 列,两个表中的 DISTRICT 列都有相同的数据我想将 TBL_TEST2 的所有 NAME 列值更新为“完成”在两个表中都找到了 DISTRICT 值“1”。

下面是我的查询表

SELECT * FROM TBL_TEST1

DISTRICT    NAME
1           Rashid
2           Ramish
1           Ali
1           Karim

SELECT * FROM TBL_TEST2

DISTRICT    NAME
1           DDD
2           DDDY
3           DDDD7
1           DD1
1           DDD4

当我尝试时

  UPDATE TBL_TEST2 SET TBL_TEST2.NAME = 'DONE'  FROM TBL_TEST2 INNER JOIN TBL_TEST1 ON TBL_TEST2.DISTRICT = TBL_TEST1.DISTRICT WHERE TBL_TEST2.DISTRICT = '1'

我在下面收到错误消息

ORA-00933: SQL command not properly ended

我测试了其他帖子中的代码,但我问我的代码是正确的,为什么我仍然收到该错误消息

【问题讨论】:

  • 您使用mysql 标记了您的问题,但错误消息表明您实际上使用的是oracle,它使用不同的语法进行连接更新。看到这个问题:stackoverflow.com/questions/2446764/…
  • 另一个可能有帮助的 SO 问题:stackoverflow.com/questions/8940471/…
  • 我测试了其他帖子中的代码,我想知道我的代码有什么问题,我仍然收到该错误消息
  • 您在 Oracle 手册中的什么地方找到了该语法?
  • @MelladQarizada 这个问题是针对 Microsoft SQL Server 而不是 Oracle 的,并且不适用于这里。

标签: sql oracle


【解决方案1】:

您的加入错误(您在 UPDATE 中使用 FROM) JOIN 的这种语法不适用于 ORACLE

UPDATE TBL_TEST2 
SET TBL_TEST2.NAME = 'DONE'  
FROM TBL_TEST2 
INNER JOIN TBL_TEST1 ON TBL_TEST2.DISTRICT = TBL_TEST1.DISTRICT 
WHERE TBL_TEST2.DISTRICT = '1';

在ORACLE中更新joined table的一个简单方法是使用joined select作为一个表

  UPDATE ( 
  SELECT TBL_TEST2.NAME AS OLD_VALUE
  FROM TBL_TEST2 
  INNER JOIN TBL_TEST1 ON TBL_TEST2.DISTRICT = TBL_TEST1.DISTRICT 
  WHERE TBL_TEST2.DISTRICT = '1' ) T
  SET T.OLD_VALUE = 'DONE'  ;

【讨论】:

  • 另外值得一提的是,在 Oracle 中,您的表需要相互关联才能更新它们之间的连接结果!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多