这个SQL查询语句是做什么的?请解释。

5
这个查询是什么意思?
@numberx = @numberx -1
UPDATE  th
SET     @numberX= numberY= @numberX + 1
FROM    Table1 th
INNER JOIN Table2 td ON th.Id = td.idth
WHERE   td.anything = @anything

在第三行,什么是“双等号”? 以及在UPDATE中,“from”和“inner”代表什么意思?


3
你应该阅读这篇关于“理解 SQL 连接”的优秀文章:http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html。 - Bartek
1个回答

8
这是一个多表更新,为Table1中的每一行分配连续的数字,并且与Table2中的相应行在anything列具有特定值。对于每个匹配的行,它将numberY列设置为@numberX + 1的值。它还将该值重新分配回@numberX,这会导致@numberX在每行中递增。这被称为“quirky update”。这是一种未记录且不能保证生成运行总数的方法。在2012年,应改用SUM() OVER (ORDER BY ...)

这是逐行增量更新,还是所有numberY值都会接收相同的增量?(刚才差点说成英语了...) - Nick Vaccaro
这在 SQL Server 中保证可行吗?我看不出来变量的存在会导致更新被串行化。 - Gordon Linoff
@MarkByers - 什么关系型数据库支持这个功能? - Mahmoud Gamal
肯定不是MySQL。MySQL在多表更新时使用不同的语法。看起来像是SQL Server。 - Mark Byers
这是SQL Server的正确格式,但在“@numberx = @numberx -1”之前缺少关键字“SET”。 - GeorgesD
谢谢你,Andy 和大家!解释非常出色! - user1006743

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接