【发布时间】:2016-08-28 07:47:06
【问题描述】:
首先,我执行以下 SQL 语句。
drop table names;
drop table ages;
create table names (id number, name varchar2(20));
insert into names values (1, 'Harry');
insert into names values (2, 'Sally');
insert into names values (3, 'Barry');
create table ages (id number, age number);
insert into ages values (1, 25);
insert into ages values (2, 30);
insert into ages values (3, 35);
select * from names;
select * from ages;
因此,创建了以下表格。
ID NAME
---------- ----------
1 Harry
2 Sally
3 Barry
ID AGE
---------- ----------
1 25
2 30
3 35
现在,我想将 Sally 的年龄增加 1,即将其设置为 31。以下查询可以正常工作。
update ages set age = age + 1 where id = (select id from names where name = 'Sally');
select * from ages;
表格现在看起来像这样。
ID AGE
---------- ----------
1 25
2 31
3 35
我想知道是否有一种方法可以通过连接来完成。例如,我尝试了以下查询,但都失败了。
SQL> update ages set age = age + 1 from ages, names where ages.id = names.id and names.name = 'Sally';
update ages set age = age + 1 from ages, names where ages.id = names.id and names.name = 'Sally'
*
ERROR at line 1:
ORA-00933: SQL command not properly ended
SQL> update ages set age = age + 1 from names join ages on ages.id = names.id where names.name = 'Sally';
update ages set age = age + 1 from names join ages on ages.id = names.id where names.name = 'Sally'
*
ERROR at line 1:
ORA-00933: SQL command not properly ended
【问题讨论】:
-
您在 Oracle 手册中的什么地方找到了该语法?
-
@Ben(谁将此标记为完全重复)-您是否阅读了另一个较旧的问题?这不是重复的,更不用说精确的了。在旧问题中,连接用于查找更新语句的更新值。在这一行中,它用于标识要更新的行。这两个问题的正确解决方案之间的重叠可能接近于零。你愿意详细说明吗?
-
@Ben 为什么这被标记为重复?是否需要至少 5 票才能将其标记为重复?
标签: oracle join sql-update oracle12c