我正在尝试在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
?
答案 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
错误。