このクエリ(プロトタイプ)を使用してtableDからデータを取得して、tableAのcol1をUPDATEしようとしています:
UPDATE tableA
SET TableA.col1 = tableB.col1
FROM tableA
INNER JOIN
(SELECT tableC.col1, id
FROM
(SELECT
ROW_NUMBER() OVER(PARTITION BY tableD.col1 ORDER BY (tableD.someCol desc) AS "Row Number",
col1, id
FROM tableD) tableC
WHERE [Row Number] = 1) tableB ON tableA.id = tableB.id
WHERE
some_clause_on_tableA_and_tableB;
残念ながら、これは正しく機能しません (誤った更新) が、#temp テーブルに tableB のデータを明示的に格納し、その #temp テーブルから tableA を更新しようとすると、正常に動作します (プロトタイプ クエリ)。
SELECT *
INTO #temp
FROM
(SELECT
ROW_NUMBER() OVER(PARTITION BY tableD.col1 ORDER BY (tableD.someCol desc) AS "Row Number",
col1, id
FROM tableD) tableC
WHERE
[Row Number]=1;
UPDATE tableA
SET TableA.col1 = tableB.col1
FROM tableA
INNER JOIN #temp tableB ON tableA.id = tableB.id
WHERE some_clause_on_tableA_and_tableB;
後者が機能する理由はわかりませんが、最初は機能しません。最初のクエリでは、ネストされた 2 つのサブクエリ (行ランキング付き) が正しいデータを取得できないようですが、間違っている可能性があります。どんな助けでも大歓迎です!!!
ありがとう、サチン