为什么我必须分配给一个 session 变量以使其在这样的查询中具有正确的数字:
SELECT @row_number := @row_number + 1, name FROM cities;
而不是像这样的东西:
SELECT @row_number, name FROM cities;
在第二种形式中,它返回我猜是最后一行的数字。甚至可能是 COUNT(*)
的值。就好像值(value)以某种方式关闭了一样。这两个查询发生了什么?
最佳答案
你有 @row_number
变量。每当下面的 sql 命中记录时,它都会显示结果并递增 1。
SELECT @row_number := @row_number + 1, name FROM cities;
如果您使用的是 mysql 8.0+,您可以使用 row_number
窗口函数来实现相同的结果
select row_number() over (order by <pk>) rn, name from cities;
如果我们返回 SELECT @row_number, name FROM cities;
,你不会递增 @row_number
这反过来总是显示相同的值,为 @row_number
PS:另请注意,您没有在查询中使用 order by
子句,这可能会导致行编号不一致。
关于mysql - 想知道为什么我必须在 mysql 中分配给 session 变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64215761/