4

「A」と「B」の 2 つのテーブルがあります。どちらも共通の列「name」を持ち、列「id」によって互いにリンクされています。テーブルAの列「名前」は空ですが、テーブルBにはデータがあります。私の仕事は、テーブルBからテーブルAまでのその列のすべてのデータに対応するIDを入力することです。

次のクエリを使用しています。

UPDATE A
SET A.name = (SELECT B.name from B WHERE A.id = B.id)
WHERE EXISTS
(SELECT B.name from B)

SQL 開発者でクエリを実行するとすぐにフリーズし、強制的に閉じる必要があります。クエリの何が問題なのか誰か教えてもらえますか?

4

2 に答える 2

6

代わりにこれを試してください:

UPDATE A
SET A.name = (SELECT B.name FROM B WHERE B.id = A.id AND B.name IS NOT NULL)
WHERE a.name IS NULL;

Oracle を使用しているため、IS NOT NULLのリファレンスは次のとおりです。

ここに SQL Fiddle があるので、それで遊ぶことができます: http://sqlfiddle.com/#!4/a5ad0/3

于 2012-09-04T16:06:22.560 に答える
2

上記の会話から、データのインデックス作成以外の変更を行ったかどうかはわかりませんが、WHERE EXISTS前述の句を含める必要があります。完全なクエリは次のようになります。

UPDATE A
   SET A.name = ( SELECT B.name FROM B WHERE B.id = A.id )
 WHERE EXISTS ( SELECT 1 FROM B WHERE B.id = A.id )

元のクエリの句は、 inWHERE EXISTSの NULL 以外の値が少なくとも 1 つあるかどうかを確認する以外、ほとんど何もしません。nameB

于 2012-09-07T12:55:20.760 に答える