3

だから私はこの素晴らしい使用法を見つけました:

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

注: ( IDのORDER BYに関係なく、各行の連続番号はif I remove the JOINs I DO get the requested resultどれですか) に気づきました。ROW最初の例はうまく機能しますが、一部の理由では、JOINが何らかの形でそれを台無しにします。

だから私はこれを手に入れます:

ROW  | ID  
3      15  
2      10  
1      2

私が求めているのは:

ROW  | ID  
1      15  
2      10  
3      2

これがSqlFiddleです

したがって、基本的に、行番号は実行される前に評価されるようですORDER BYORDER BY行が与えられた後に行う必要があります。

どうすればそれを達成できますか?

4

2 に答える 2

9

:を削除しORDER BYます

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

SQL FiddlewithDemoを参照してください

ORDER BY次に、別のクエリでラップを使用する場合SELECT

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

または、クエリをそのままにしておくと、いずれかまたは順序ORDER BYで遊ぶだけで、行番号がどのように適用されているかを確認できます-デモを参照してくださいDESCASC

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 FiddlewithDemoを参照してください

于 2012-10-03T11:38:44.820 に答える
4

私はあなたの質問に問題を見つけません

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


SQLFiddleデモ

于 2012-10-03T11:42:16.617 に答える