0
UPDATE table1
 SET variable1 = (SELECT variable1 FROM table2),
     variable2 = (SELECT variable2 FROM table2)
WHERE table1.variable3 = table3.variable3;

基本的に、table2 のデータを使用して table1 を更新するクエリを作成しています。ただし、where ステートメントは table1 と table3 を使用しています。これが機能するかどうか、または SELECT の後に WHERE ステートメントを使用していくつかの制約を作成する必要があるかどうか疑問に思っています。

4

3 に答える 3

4

いいえ、ネストされたサブクエリが単一の行のみを返すという明示的な保証がないためです。
編集:そして、質問に対する@wildplasserのコメントごとに、table3がJOIN適切に編集されていないため(まったく)失敗します

この変更を検討してください...おそらくあなたの目標には正しくありませんが、各サブクエリから単一の行のみを返すため機能的です:

UPDATE 
    table1
SET 
    variable1 = (SELECT TOP 1 variable1 FROM table2)
    ,variable2 = (SELECT TOP 1 variable2 FROM table2)
FROM
    table1
JOIN 
    table3
        ON table3.variable3 = table1.variable3
于 2012-04-30T18:29:52.450 に答える
2

いいえ、できます。

UPDATE table1
    SET variable1 = (SELECT TOP 1 variable1 FROM table2),
        variable2 = (SELECT TOP 1 variable2 FROM table2)
FROM table1
    INNER JOIN table3 on table1.variable3 = table3.variable3
于 2012-04-30T18:30:13.777 に答える
0

いいえ、これはうまくいきません。(ほとんど?) ただし、RDBMS では JOINed UPDATE を実行できます。これは一般的に、これらの問題にアプローチするためのより良い方法です IMO:

UPDATE table1
SET variable1 = table2.variable1,
    variable2 = table2.variable2
FROM table1
JOIN table3 ON
    table1.variable3 = table3.variable3
--Presumably there's only 1 row in table2, with no JOIN criteria
CROSS JOIN table2;

そのUPDATE中のすべての行は、中の値にtable1も含まれますtable3table2

于 2012-04-30T18:34:33.810 に答える