这是我的 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/