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

注:( IDのORDER BYに関係なく、各行の連続番号はif I remove the JOINs I DO get the requested resultどれですか)に気づきましたROW

基本的に、行番号はORDERBYが実行される前に評価されるようです。行が指定された後にORDERBYを実行する必要があります。

それをどのように達成できるか、そしてそれを台無しにする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 に答える