2011-08-04 16 views
0

私は2つのテーブルを持っています。表1「色」は列「赤」、「青」、「緑」を有する。各列は、色が選択された回数を表すint型です。これらは、言い換えるとカウンタです。別のテーブルの条件に基づいてテーブルを更新する

表2 'selected_colors'には[person]と[color]の列があり、personは一意ではありません。人が選択した色ごとに、[人物]と[色]を含む行が1つあります。

私の問題は、以来、テーブル#1のカウンタをリセットしていることです。私はまだテーブル#2の情報を持っています。テーブル#2のクエリに基づいてカラーカウンタを設定する必要があります。

短い質問:SELECT結果からのUPDATEの使い方は?あなたのテーブル定義や例のデータを見て、考慮しない

答えて

1

は、あなただけの3色があり、これは一度オフ運動はこれを試している:

UPDATE [color] SET [red] = SELECT COUNT(1) FROM [selected_colors] WHERE [color] = 'red' 

を、青と緑のために繰り返します。

+0

これは素晴らしいことです。しかし、それをループに入れて各色を自動的に反復することは可能ですか?私は現在60色以上を持っています。申し訳ありませんが、私はSQLのnoobです、あなたの返信を感謝します。 – Ronald

1

代わりに表1のビューを使用していない理由はありますか?

Create View color AS 
select r.red,blue,green from 

(select count(color) as red from selected_colours where color='red') AS r, 
(select count(color) as red from selected_colours where color='blue') AS b, 
(select count(color) as red from selected_colours where color='green') AS g 

すなわち代わりに、あなたの更新クエリは

update color set red=r.red,blue=b.blue,green=g.green from 
(select count(color) as red from selected_colours where color='red') AS r, 
(select count(color) as red from selected_colours where color='blue') AS b, 
(select count(color) as red from selected_colours where color='green') AS g 

EDITでなければなりません - ダイナミックな色についてのコメントの後。

あなたはこれがそのカウントを持つ各色の行にあなたを与えるだろう

Create View color AS 
select color, count(color) as count from selected_colors group by color 

ビューを作成する必要があり、あなたは簡単に(例えば変更の列を動的結果の構造を変更しますクエリを作成することはできません。 )。その可能性はありますが、動的クエリ作成では多くの作業が必要になり、効率的ではありません。

+0

これをループに入れて、各色を自動的に反復することは可能ですか?私は60色以上を持っていますが、それは毎回どんな色があるのか​​を設定していません。緑色のようなものは、ある日、翌日ではないかもしれません。もっと一般的にこれにアプローチする方法はありますか?前もって感謝します。 – Ronald

+0

mysql、postgresql Microsoft SQLを使用しているサーバエンジンはどれですか? –

関連する問題