0

既存のデータベースを正規化しています。現在、Table1にドメインとコンテナの2つの列があり、明確な組み合わせは限られています(現在、これら2つの組み合わせは約1000レコードから約30の組み合わせです)。新しいレコードがインストールされたときに自動生成される主キー(container_id)を使用して、すべての組み合わせを保持する新しいTable2を作成しました。Table1にcontainer_id列を追加し、Table1.container列に基づいて値を入力したいと思います。

この時点で、表2のすべてのコンテナー名は区別されますが、将来変更される可能性があるため、PKとして一意の番号が必要になります。

すなわち

UPDATE Table1   
SET container_id = (SELECT Table2.container_id
    FROM Table2
    WHERE Table2.container = Table1.container)
WHERE EXISTS
  ( SELECT Table2.container_id
    FROM Table2
    WHERE Table2.container = Table1.container)

このクエリerror 1242: subquery returns more than one row. は、完全に間違ったツリーを吠えていますか?Table2の重複値はゼロである必要があります。

4

2 に答える 2

0

結合を使用して table1 を更新する必要がありました

UPDATE Table1 
LEFT JOIN Table2 USING (container) 
SET Table1.contanier_id = Table2.contanier_id
WHERE Table1.contanier_id IS NULL AND Table2.contanier_id IS NOT NULL;
于 2012-06-30T18:21:53.903 に答える
0

Table2.container は一意ではないため、繰り返される可能性があります。このため、両方のサブクエリが複数の行を返します。

于 2012-06-30T18:31:55.967 に答える