从另一个 table Oracle 更新
Update from another table Oracle
表 1
Tripid sequence Pattern
1 1
1 2
1 3
2 1
2 2
表 2
Tripid Pattern
1 A
2 B
我正在尝试更新 table 1 的模式,最终结果应该是:
Tripid sequence Pattern
1 1 A
1 2 A
1 3 A
2 1 B
2 2 B
我使用的代码:
update table1
set table1.pattern =
(select pattern from table2 where table1.tripid = table2.tripid)
where exists
(select pattern from table2 where table1.tripid = table2.tripid)
Oracle 数据库错误:ORA-01427:单行子查询 returns 多于一行
如何在 oracle 10g 中正确执行?
您可以为此使用 MERGE 语句。
查询:
select * from t1
| TRIPID | SEQ | PATTERN |
|--------|-----|---------|
| 1 | 1 | (null) |
| 1 | 2 | (null) |
| 1 | 3 | (null) |
| 2 | 1 | (null) |
| 2 | 2 | (null) |
查询:
merge into t1
using t2
on (t1.tripid = t2.tripid)
when matched then update
set pattern = t2.pattern
查询:
select * from t1
| TRIPID | SEQ | PATTERN |
|--------|-----|---------|
| 1 | 1 | A |
| 1 | 2 | A |
| 1 | 3 | A |
| 2 | 1 | B |
| 2 | 2 | B |
也许,tripid在table2中不是唯一的?
它在你的例子中,但它在你的真实数据中是唯一的吗?
DROP table table1;
create table table1(tripid number, sequence number, pattern CHAR(1));
insert into table1 values (1,1,null);
insert into table1 values (1,2,null);
insert into table1 values (1,3,null);
insert into table1 values (2,1,null);
insert into table1 values (2,2,null);
DROP table table2;
create table table2(tripid number, pattern CHAR(1));
insert into table2 values (1,'A');
insert into table2 values (2,'B');
commit;
select table2.tripid, table2.pattern from table2,table1 where table1.tripid = table2.tripid;
update table1
set table1.pattern =
(select pattern from table2 where table1.tripid = table2.tripid)
where exists
(select pattern from table2 where table1.tripid = table2.tripid);
commit;
select * from table1;
returns:
Table dropped.
Table created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
Table dropped.
Table created.
1 row created.
1 row created.
Commit complete.
TRIPID PATTERN
---------- -------
1 A
1 A
1 A
2 B
2 B
5 rows selected.
5 rows updated.
TRIPID SEQUENCE PATTERN
---------- ---------- -------
1 1 A
1 2 A
1 3 A
2 1 B
2 2 B
5 rows selected.
这证明有了良好的数据,Oracle(和您的查询)就可以完美运行。
基督教徒
表 1
Tripid sequence Pattern
1 1
1 2
1 3
2 1
2 2
表 2
Tripid Pattern
1 A
2 B
我正在尝试更新 table 1 的模式,最终结果应该是:
Tripid sequence Pattern
1 1 A
1 2 A
1 3 A
2 1 B
2 2 B
我使用的代码:
update table1
set table1.pattern =
(select pattern from table2 where table1.tripid = table2.tripid)
where exists
(select pattern from table2 where table1.tripid = table2.tripid)
Oracle 数据库错误:ORA-01427:单行子查询 returns 多于一行
如何在 oracle 10g 中正确执行?
您可以为此使用 MERGE 语句。
查询:
select * from t1
| TRIPID | SEQ | PATTERN |
|--------|-----|---------|
| 1 | 1 | (null) |
| 1 | 2 | (null) |
| 1 | 3 | (null) |
| 2 | 1 | (null) |
| 2 | 2 | (null) |
查询:
merge into t1
using t2
on (t1.tripid = t2.tripid)
when matched then update
set pattern = t2.pattern
查询:
select * from t1
| TRIPID | SEQ | PATTERN |
|--------|-----|---------|
| 1 | 1 | A |
| 1 | 2 | A |
| 1 | 3 | A |
| 2 | 1 | B |
| 2 | 2 | B |
也许,tripid在table2中不是唯一的?
它在你的例子中,但它在你的真实数据中是唯一的吗?
DROP table table1;
create table table1(tripid number, sequence number, pattern CHAR(1));
insert into table1 values (1,1,null);
insert into table1 values (1,2,null);
insert into table1 values (1,3,null);
insert into table1 values (2,1,null);
insert into table1 values (2,2,null);
DROP table table2;
create table table2(tripid number, pattern CHAR(1));
insert into table2 values (1,'A');
insert into table2 values (2,'B');
commit;
select table2.tripid, table2.pattern from table2,table1 where table1.tripid = table2.tripid;
update table1
set table1.pattern =
(select pattern from table2 where table1.tripid = table2.tripid)
where exists
(select pattern from table2 where table1.tripid = table2.tripid);
commit;
select * from table1;
returns:
Table dropped.
Table created.
1 row created.
1 row created.
1 row created.
1 row created.
1 row created.
Table dropped.
Table created.
1 row created.
1 row created.
Commit complete.
TRIPID PATTERN
---------- -------
1 A
1 A
1 A
2 B
2 B
5 rows selected.
5 rows updated.
TRIPID SEQUENCE PATTERN
---------- ---------- -------
1 1 A
1 2 A
1 3 A
2 1 B
2 2 B
5 rows selected.
这证明有了良好的数据,Oracle(和您的查询)就可以完美运行。
基督教徒