0

可能重复:
MySQL 查询中的每一行都需要一个序列号

所以我发现这个很有用:

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

我的表看起来更像这样:

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 
,(SELECT @row := 0) r   
ORDER BY ID DESC

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

所以我得到更像这样的东西:

ROW  | ID  
3      15  
2      10  
1      2

我追求的是:

ROW  | ID  
1      15  
2      10  
3      2

注意:我注意到if I remove the JOINs I DO get the requested result(其中ROW是每行的序号,无论 ID 的 ORDER BY 是什么)

基本上似乎在 ORDER BY 发生之前评估了行号。我需要在给出行后进行 ORDER BY。

关于我如何实现这一目标的任何想法,以及 JOINS 做了什么弄乱了它?

谢谢!

4

1 回答 1

0

我需要在给出行后进行 ORDER BY。

然后试试这个:

SELECT *
FROM
(
   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 
    ,(SELECT @row := 0) r 
) t
ORDER BY ROW ASC
于 2012-10-03T13:18:04.320 回答