Oracle中的Update-Set-From语法问题

时间:2018-04-11 19:51:36

标签: sql oracle sql-update

我正在尝试在Oracle中执行一个简单的SQL update-set-from语句,如下所示:

update
table1 t1
set
t1.col1=t2.col1
from
(select distinct t1.col1 from table1 t1 where t1.col2='xxx') as t2
where
t1.col1='yyy';

我之前没有使用from update-set,但这种语法对我来说没问题。然而它失败了这个错误:

Error report -
SQL Error: ORA-00933: SQL command not properly ended
00933. 00000 -  "SQL command not properly ended"
*Cause:
*Action:

我想要的结果是内部选择返回单个记录,然后将其插入/更新到table1' s col1

另外,我是否应该在内部select语句中为t1使用与table1不同的别名,考虑到我已在更新语句中使用过t1

1 个答案:

答案 0 :(得分:3)

语法应为

update table t1 set
  t1.col1 = (select distinct t2.col1 
             from table1 t2
             where t2.col2 = 'xxx')
where t1.col1 = 'yyy';             

请注意,DISTINCT并不一定意味着SELECT将返回单个值;如果没有,您最终会遇到TOO-MANY-ROWS错误。