2017-10-17 19 views
0

SqliteでUPDATEコマンドを取得して、サブクエリ選択文を使用して別のテーブルで見つかった新しい値ですべてのレコードを更新するのが困難です。 Table1の各列が、Table2列で最初に検出された値で間違って更新されます。 クエリの選択部分だけを実行すると、正常に実行され、適切な値がすべて返されます。基本的には、Adjustmentというルックアップテーブルから最も近い値を300000の倍数で検索します。SelectサブクエリによるSelectサブクエリのみ最初の値をchosing

コード:

Update TEMP1 
    set New_position = 
    (
     select (Temp1.Col1 + Adjustment.Offset) as NewValue 
     from Adjustment, TEMP1 
     where Adjustment.LookupValue = cast(TEMP1.Col1/300000 as Int) * 300000 
    ) 

答えて

0

あなたはcorrelated subqueryを使用しようとしている。

スカラー副問合せのどちらかとしてまたはINの右オペランドとして使用SELECTステートメントは、NOT INまたはEXISTS式には、外部クエリの列への参照が含まれる場合があります。このようなサブクエリは、相関サブクエリとして知られています。相関副照会は、その結果が要求されるたびに再評価されます。無相関サブクエリは1回だけ評価され、結果は必要に応じて再利用されます。

ただし、サブクエリには実際には外部クエリの列への参照は含まれません。内部クエリのFROM Temp1Temp1テーブルの新しいインスタンスであり、Temp1.Col1はそれを参照しています。 Temp1.Col1の値は、Temp1のランダムな行の値です。

ただ、FROM句からTemp1をドロップ:

UPDATE Temp1 
SET New_position = (SELECT Temp1.Col1 + Adjustment.Offset 
        FROM Adjustment 
        WHERE LookupValue = CAST(Temp1.Col1/300000 AS INT) * 300000); 
+0

アメージング!それがそれでした。どうもありがとうございます – DaveP

関連する問題