在查询中需要行的序列号

时间:2012-10-03 13:16:31

标签: mysql sql-order-by

  

可能重复:
  Need a sequence number for every row in MySQL query

所以我觉得这很有用:

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做了什么让它变得混乱?

THX!

1 个答案:

答案 0 :(得分: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