【发布时间】:2015-08-06 19:52:54
【问题描述】:
是否可以使用同一列中的值更新表中的列?更新取决于按正确顺序选择的行。
我试过的查询如下:
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
【问题讨论】:
-
有可能,您的更新声明对我来说似乎没问题。您可能会在与子查询不匹配的行中得到空值。
-
您的更新查询似乎运行良好,就像@ZoharPeled 所说的那样。 sqlfiddle.com/#!3/e0194/1/0
-
感谢您的回复。它适用于像这样的小玩具桌。但我发现在我的大表上,行的顺序可能不同,它不能正确更新行。有些行保留为“--”
-
也许你可以分配一个
row_number()?
标签: sql-server sql-update