2016-04-19 22 views
0

他の2つのテーブル "temp_table" "resource1"でいくつかの操作を実行して、3番目のテーブル "temp_table1"を更新したいとします。2つのテーブルを結合して3番目のテーブルを更新する

TEMP_TABLE:

+-----------+ 
| temp  | 
+-----------+ 
| 0.46574 | 
+-----------+ 

リソース1:

+------------------+ 
| evaluation_value | 
+------------------+ 
|   0.23  | 
|   0.56  | 
|   0.76  | 
|   0.25  | 
|   0.79  | 
+------------------+ 

temp_table1:

+-----------+ 
| temp  | 
+-----------+ 
| 0  | 
+-----------+ 

は今、私は、「リソース1からすべてのevaluation_valueで "TEMP_TABLE" から一時値を減算したいです"temp_table1"に0.25より小さい減算値を保存し、thを更新したいe "temp_table1"を実行します。

私は、このために次のクエリを構築し、私はどこか間違っているつもりです:

update temp_table1 t1 
set t1.temp = (
    select (e.evaluation_value - t.temp) < 0.25 
    from resource1 e 
    Inner join temp_table t) 

ありがとうございました!!!

+0

どのような値がtempで開始するのですか? UPDATEではなくtempにINSERTするだけのようです。 –

+0

最初のtemp_tim_table1の値は0です。 – user3304748

+0

例のデータでは、temp_値(0.46574)を差し引いた後に0.25未満になる3つの行がevaluation_valueにあります。あなたは更新中の3行は何ですか? –

答えて

0

クエリを実行するたびに、あなたは新しいものを移入、その後、既存の値をクリアする必要があります。

TRUNCATE TABLE temp_table1 
GO 

INSERT INTO temp_table1 
SELECT 
    e.evaluation_value - t.temp 
FROM temp_table t 
    CROSS JOIN resource1 e 
WHERE (e.evaluation_value - t.temp) < 0.25 

UPDATEのみ、現在、既存の行にデータを変更し、それはあなたの意図ではないためだ - あなたがしたいです毎回新しい結果を得る。また、行数は実行ごとに異なる可能性がありますので、ここではUPDATEは適していません。

もう1つの問題は、選択したJOINタイプの場合です。INNERは、あるテーブルのレコードから他のテーブルへのマッピングが厳密な場合(両方のテーブルに存在するIDのように)、 ONキーワードでマッピングしますが、CROSSは、最初のテーブルのすべてを他のテーブルにすべて結合します(マッピングは不要です)。

+0

素晴らしい!ありがとうございました – user3304748

関連する問題