SQL Server根据同一个表中的值更新表

时间:2015-08-06 19:52:55

标签: sql-server sql-update

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

我尝试的查询如下:

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。

我的表格如下:

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

1 个答案:

答案 0 :(得分:0)

您是否可以包含一些语言最终为NULL的结果行?还有那些行之前的样子?

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

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