3
使用使用@ N = @ N + 1的經典技巧來獲取某些有序列上的項目排名。現在在訂購之前,我需要通過內部連接它與其他表格過濾出基表中的一些值。所以查詢看起來是這樣的 - :在使用變量的索引中存在MySQL排名
SET @N=0;
SELECT
@N := @N + 1 AS rank,
fa.id,
fa.val
FROM
table1 AS fa
INNER JOIN table2 AS em
ON em.id = fa.id
AND em.type = "A"
ORDER BY fa.val ;
的問題是,如果我沒有在em.type索引,那麼一切工作正常,但如果我把一個索引上em.type,地獄和解開排列值而不是由val列排序的順序是這些行存儲在電子表格中。
這裏有樣品輸出 - :
沒有指數 - :
rank id val
1 05F8C7 55050.000000
2 05HJDG 51404.733458
3 05TK1Z 46972.008208
4 05F2TR 46900.000000
5 05F349 44433.412847
6 06C2BT 43750.000000
7 0012X3 42000.000000
8 05MMPK 39430.399658
9 05MLW5 39054.046383
10 062D20 35550.000000
與指數 - :
rank id val
480 05F8C7 55050.000000
629 05HJDG 51404.733458
1603 05TK1Z 46972.008208
466 05F2TR 46900.000000
467 05F349 44433.412847
3534 06C2BT 43750.000000
15 0012X3 42000.000000
1109 05MMPK 39430.399658
1087 05MLW5 39054.046383
2544 062D20 35550.000000
我相信使用索引應該是完全透明的,輸出不應該受其影響。這是MySQL中的錯誤嗎?
任何解決方案/評論? – bootkick