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
是否可以使用同一列中的值更新 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