左括弧がない、それの後に、select
前にする必要があります:
UPDATE Table1 t1
SET NAME = (SELECT t2.name
FROM table2 t2
WHERE t1.ID = t2.ID);
全体サブクエリは、カッコ内にあります。 3番目の例では、リンクされたPSOUGページには、「照会された単一の値に基づいた更新」が表示されます。どのようなthe examples in the documentationが表示されます。
クイックデモ、簡単なテーブルセットアップで:
create table table1 (id number, name varchar2(10));
insert into table1 values (1, null);
insert into table1 values (2, 'Old name');
insert into table1 values (3, null);
create table table2 (id number, name varchar2(10));
insert into table2 values (1, 'New name 1');
insert into table2 values (2, 'New name 2');
質問からあなたの元のコードを取得します。
Error report -
SQL Error: ORA-00936: missing expression
00936. 00000 - "missing expression"
作品上記のコードを:
UPDATE Table1 t1
SET NAME = (SELECT t2.name
FROM table2 t2
WHERE t1.ID = t2.ID);
3 rows updated.
select * from table1;
ID NAME
---------- ----------
1 New name 1
2 New name 2
3
あなたがmigと思うようなコメントからこの間違ったで
UPDATE Table1 t1
SET NAME = (
SELECT t2.name
FROM table1 t1
JOIN table2 t2
ON t1.ID = t2.ID);
Error report -
SQL Error: ORA-01427: single-row subquery returns more than one row
01427. 00000 - "single-row subquery returns more than one row"
:HTまだ更新されているテーブルにエイリアスを持っている場合でも、サブクエリでtable1
への別の参照を持っている必要がありますが、あなたは、あなたが更新とサブクエリの行の間の相関関係を失うことを行う場合サブクエリ内のtable1
およびt1
エイリアスは、外側のupdate ...
節にあるtable1
またはt1
とは関係がありません。
のような値を持っています! 'id'を格納し、名前が必要なときに名前を調べます。これがリレーショナルデータベースの仕組みです。 –
最初のテーブルの不足している名前を記入しようとしています。 2番目の表はちょうど一時的なものです。 –