2011-07-08 20 views
0

私は3つのテーブル次き:更新テーブル:ヘルプしてください

storage (
id, 
client, 
cost, -- which have no values 
col_1, -- which have no values 
col_2, -- which have no values 
col_3, -- which have no values 
and other columns 
) 

output(
id, 
client, 
col_1, 
col_2, 
col_3 
) 

ad(
id, 
client, 
cost, 
and other colums 
) 

記憶表には、170行、出力は50と広告の表は、1000行を持っていています。私は必要なもの

は、その更新がad.costからの値で をstorage.costあるstorage.col_1を更新し、storage.col_2、output.col_1からの値を持つstorage.col_3、output.col_2、 output.col_3に基づきます3つのテーブルの間でクライアント列に参加します。

更新クエリが不可能な場合、別のテーブルに挿入してストレージの代わりにそのテーブルを使用できるように、3つのテーブルの間でクライアント列の結合で ベースの選択クエリが必要です。 更新クエリが 必要でないように、広告テーブルと170行からの出力とコストからストレージのすべての列、col_1、col_2、col_3が必要です。これらの170行をストレージテーブルとして使用できます。

助けてください。

答えて

1

私の意見では、データベースモデルの設計は間違っています。

は、なぜあなたは他のテーブルに基づいてビュー v_storage作成しないでください:

CREATE VIEW v_storage AS 
    SELECT o.client, a.cost, o.col_1, o.col_2, o.col_3, s.other_columns 
    FROM output AS o 
    JOIN ad AS a ON a.client = o.client 
    JOIN storage AS s ON s.client = o.client 

をストレージテーブルから重複costcol_N列を削除します。

しかし、あなたはまだ尋ねた質問に対する答えが必要な場合、あなたはあなたのUPDATE文で複数のテーブルを指定し、それらに選択するためのテーブルを使用することができます:

を編集

UPDATE storage, output, ad 
    SET storage.cost = ad.cost, storage.col_1 = output.col_1, ... 
WHERE output.client = storage.client 
AND ad.client = storage.client 
関連する問題