SQL 服务器根据 table 中的值更新 table

SQL Server update a table based on values in the same table

是否可以使用同一列中的值更新 table 上的列?更新取决于以正确顺序选取的行。

我试过的查询如下:

UPDATE myTable
SET language = (SELECT language FROM myTable t2
        WHERE t1.book = t2.book
        AND t1.firstRun = t2.lastRun + 1)
FROM myTable t1
WHERE language = '--'

结果是在某些情况下我最终将语言设置为 NULL。

我的 table 看起来像这样:

book    | firstRun    | lastRun    | language
----------------------------------------------
b1      | 1           | 4          | English
b1      | 5           | 9          | --
b1      | 10          | 25         | French
b1      | 26          | 28         | --

所需输出:

book    | firstRun    | lastRun    | language
----------------------------------------------
b1      | 1           | 4          | English
b1      | 5           | 9          | English
b1      | 10          | 25         | French
b1      | 26          | 28         | French

您能否包含一些语言以 NULL 结尾的结果行?还有这些行以前的样子?

要以 NULL 结束,子查询中的 JOIN 必须生成 0 行,或者 'myTable' 中已经有行,其中语言为 NULL。

P.S。缩进和清理代码时更容易:

UPDATE 
    myTable
SET 
    myTable.language = t2.language 
FROM 
    myTable t2
WHERE 
    myTable.language    = '--' AND
    myTable.book        = t2.book AND
    myTable.firstRun    = t2.lastRun + 1