web-dev-qa-db-ja.com

「単一行のサブクエリが複数の行を返す」ことを回避しながら、重複するIDを持つテーブルを更新する

現在、会社の別のテーブルのデータに基づいて、1つのテーブルのデータを更新するSQLを作成しています

update table1
set column1 = (SELECT color
                FROM table2
                Where table1.id = table2.id)

私の目標はtable1column 1からの色で構成されるtable 2、ただしidは一意ではなく、会社のCVRであるため、複数回表示されてエラー"single-row subquery returns more than one row"。複製には異なる色を使用できますが、これに対処する方法がわかりません。

また、重複は別の色になる可能性がありますが、すべてのインスタンスの99%ではそうではないようです。最初の色が不可能な場合は、更新する方法があるので、すべての重複が同じ色になりますか?

2
Levicia

エラーメッセージが示すように、set column1 =句には単一の値が必要です。データモデルに問題があるようですが、簡単な修正が必要な場合は、選択クエリを変更して単一の値を返すことができます。複数のcolorがwhere句に一致する場合、以下はtable2からの一意のcolorです。

update table1
set column1 = (SELECT distinct color
                FROM table2
                Where table1.id = table2.id 
                and rownum = 1
              )

時間がある場合は、別のレベルを追加して、一致する最も一般的な色を見つけ、最初の行を返します。

最初の明確な色を返すようにサブクエリを更新しました-これを指摘してくれたRDFozzに感謝します。

1
Mark Stewart