我正在尝试使用此查询(原型)更新 tableA 中的 col1 从 tableD 获取数据:
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;
但不幸的是,这不能正常工作(更新不正确),但如果我将 tableB 的数据显式存储在 #temp 表中,然后尝试从该 #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;
我不知道为什么后来的作品,但首先没有。似乎在第一次查询中,两个嵌套的子查询(具有行排名)无法获取正确的数据,但我可能错了。任何帮助将不胜感激!!!
谢谢,萨钦