mysql - 想知道为什么我必须在 mysql 中分配给 session 变量?

标签 mysql sql

为什么我必须分配给一个 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/

相关文章:

php - 合并 MySQLi 行并添加计数器?

php - 在数据库中存储真正的换行符

mysql - 将 CAST 与 insert into ... select 结合使用

sql - t-sql 将日期分配给学年

mysql - 检查数据库的用户名和数据是否与用户信息匹配

SQL 错误 : "There are no primary or candidate keys in the referenced table..."

sql - 不兼容的数据透视类型 SQL

mysql - 如何在 Laravel 中编写 orWhereYear()

mysql - 使用计算值更新列

mysql - 在MYSQL select查询中,我们是否只需要传递 'INT'类型数据的int值?