mysql - 如何在MySQL中使用join和order by子句生成自增临时字段

标签 mysql auto-increment

这是我的 friend 表

+----+------------------+------------+
| id | name             | address    |
+----+------------------+------------+
|  1 | Tony Stark       | Chicago    |
|  2 | Natasha Romanoff | Boston     |
|  3 | Steve Rogers     | Arkansas   |
|  4 | Bruce Banner     | Long Beach |
+----+------------------+------------+

这是我的角色表

+----+-----------------+-----------+
| id | role_name       | people_id |
+----+-----------------+-----------+
|  1 | Iron Man        |         1 |
|  2 | Black Widow     |         2 |
|  3 | Captain America |         3 |
|  4 | Hulk            |         4 |
+----+-----------------+-----------+

我想从这两个表中获取数据,并使用此查询生成自动增量序列号字段

SELECT @rownum := @rownum + 1 as no, peoples.name, roles.role_name
FROM peoples
CROSS JOIN (select @rownum := 0) r
JOIN roles ON roles.people_id = peoples.id
ORDER BY peoples.name ASC

但是结果并不是我所期望的。这是结果

+------+------------------+-----------------+
| no   | name             | role_name       |
+------+------------------+-----------------+
|    4 | Bruce Banner     | Hulk            |
|    2 | Natasha Romanoff | Black Widow     |
|    3 | Steve Rogers     | Captain America |
|    1 | Tony Stark       | Iron Man        |
+------+------------------+-----------------+

也许是因为 JOIN 和 ORDER BY 的原因。如何解决这个问题以便我获得序列号?

最佳答案

如果您想在 peoples 表上按名称应用行号,您应该首先在子查询中生成它,然后联接到该子查询:

SELECT
    p.no,
    p.name,
    r.role_name
FROM
(
    SELECT id, name, address, @rownum:=@rownum + 1 AS no
    FROM peoples
    ORDER BY name
) p
CROSS JOIN (SELECT @rownum := 0) t
INNER JOIN roles r
    ON p.id = r.people_id
ORDER BY
    p.no;

关于mysql - 如何在MySQL中使用join和order by子句生成自增临时字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57228773/

相关文章:

MySQL - 类名称为 2 列

java - 基于数据库父子表建模类的正确方法

sql-server-2005 - 我应该如何在 SQL Server 2005 中实现 "autonumber"字段?

mysql - 按组自动递增

mysql - 从表中删除后自动递增

sql - 如何在 postgres 中强制执行自动增量?

java - 如何修复类文件是 Java 8 但最大支持是 Java 7

mysql - SQLAlchemy:使用不同类型键的表之间的关系?

mysql内部连接最大值

mysql - MySQL自动增量问题