2013-04-10 9 views
26

Come si crea e incrementa automaticamente una colonna temporanea nella mia istruzione select con MySQL?MySQL: incremento automatico della colonna temporanea nell'istruzione select

Ecco quello che ho finora:

SET @cnt = 0; 
SELECT 
    (@cnt [email protected] + 1) AS rowNumber, 
    rowID 
FROM myTable 
WHERE CategoryID = 1 

che restituisce:

+++++++++++++++++++++ 
+ rowNumber | rowID + 
+++++++++++++++++++++ 
+ (NULL) | 1 + 
+ (NULL) | 25 + 
+ (NULL) | 33 + 
+ (NULL) | 150 + 
+ (NULL) | 219 + 
+++++++++++++++++++++ 

Ma ho bisogno:

+++++++++++++++++++++ 
+ rowNumber | rowID + 
+++++++++++++++++++++ 
+ 1  | 1 + 
+ 2  | 25 + 
+ 3  | 33 + 
+ 4  | 150 + 
+ ...  | ... + 
+++++++++++++++++++++ 
+0

'1, 2, 2, 4' .. spiegare dove 3 scompare per – Kermit

+1

@FreshPrinceOfSO da qualche parte dopo la preposizione – swasheck

+0

Siamo spiacenti, errore di battitura ! Questo dovrebbe essere un 3. – Sg1456

risposta

47

Questo vi darà un numero consecutivo numero di riga con 3.

SELECT 
    (@cnt := @cnt + 1) AS rowNumber, 
    t.rowID 
FROM myTable AS t 
    CROSS JOIN (SELECT @cnt := 0) AS dummy 
WHERE t.CategoryID = 1 
ORDER BY t.rowID ; 

Risultato

| ROWNUMBER | ROWID | 
--------------------- 
|   1 |  1 | 
|   2 | 25 | 
|   3 | 33 | 
|   4 | 150 |
+0

scusa, ma a cosa serve il b? Sto ancora ricevendo un errore su quella linea. – Sg1456

+1

'b' è l'alias della tabella" fittizia ". Prova il codice modificato. –

+0

Funziona! Grazie mille! – Sg1456

15

Prova questo:

SET @rownr=0; 
SELECT @rownr:[email protected]+1 AS rowNumber, rowID 
    FROM myTable 
    WHERE CategoryID = 1 
11

Ma cosa succede se si dispone di un group by nell'istruzione SELECT? il conteggio sarà disattivato.

In questi casi, l'unica soluzione che ho trovato nidifica selezionare:

SELECT (@cnt := @cnt + 1) AS rowNumber, t.* 
from 
(select 
    t.rowID 
FROM myTable 
WHERE CategoryID = 1 
ORDER BY rowID) t 
CROSS JOIN (SELECT @cnt := 0) AS dummy 
+1

Sei una legenda! Ho cercato l'intero SO per questo caso specifico ma non è stata trovata alcuna soluzione finché non ho trovato questa risposta! – AlphaMale

+0

Grazie per aver condiviso questo era esattamente quello che stavo cercando. – w5m