gpt4 book ai didi

mysql - MySQL 查询中的每一行都需要一个序列号

转载 作者:行者123 更新时间:2023-11-29 01:08:59 27 4
gpt4 key购买 nike

所以我发现这个很好用:

SELECT (@row:=@row+1) AS ROW, ID  
FROM TableA ,(SELECT @row := 0) r
ORDER BY ID DESC

@row:=@row+1 效果很好,但我得到的行是按 ID 排序的。

我的表格看起来更像这样:

SELECT (@row:=@row+1) AS ROW, ID , ColA, ColB, ColC
FROM TableA
JOIN TableB on TableB.ID = TableA.ID
JOIN TableC on TableC.ID = TableA.ID
WHERE ID<500
,(SELECT @row := 0) r
ORDER BY ID DESC

注意:我注意到 如果我删除 JOIN,我会得到请求的结果(其中 ROW 是每行的序号,无论 ID 的 ORDER BY 是什么)。第一个示例运行良好,但出于某些原因,JOIN 以某种方式将其搞砸了。

所以我明白了:

ROW  | ID  
3 15
2 10
1 2

我追求的是:

ROW  | ID  
1 15
2 10
3 2

这是 SqlFiddle

所以基本上看来行号是在 ORDER BY 发生之前计算的。我需要在给出行后执行 ORDER BY

我怎样才能做到这一点?

最佳答案

删除ORDER BY:

SELECT (@row:=@row+1) AS ROW, ID  
FROM table1 ,(SELECT @row := 0) r

参见 SQL Fiddle with Demo

然后,如果您想使用 ORDER BY 将查询包装在另一个 SELECT 中:

select *
from
(
SELECT (@row:=@row+1) AS ROW, ID
FROM table1 ,(SELECT @row := 0) r
) x
order by row

或者,如果您在查询中保留 ORDER BY,那么您可以通过简单地使用 DESC 来查看应用行号的方式ASC 顺序 - See Demo

如果你使用DESC顺序

SELECT (@row:=@row+1) AS ROW, ID  
FROM table1, (SELECT @row := 0) r
order by id desc;

结果是你想要的结果:

ROW | ID
----------
1 | 15
2 | 10
3 | 2

如果你使用ASC顺序:

SELECT (@row:=@row+1) AS ROW, ID  
FROM table1 ,(SELECT @row := 0) r
ORDER BY ID;

结果是:

ROW | ID
----------
1 | 2
2 | 10
3 | 15

编辑,根据你的变化,你应该将行号放在子查询中,然后加入其他表:

select *
from
(
SELECT (@row:=@row+1) AS ROW, ID
FROM Table1,(SELECT @row := 0) r
order by ID desc
) x
JOIN Table2
on x.ID = Table2.ID;

参见 SQL Fiddle with Demo

关于mysql - MySQL 查询中的每一行都需要一个序列号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12707646/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com