web-dev-qa-db-fra.com

Générer un numéro de série dans une requête mysql

J'ai une table: student_marks

marks
-----
  44
  55
  64
  98
  76

Production attendue:

serial_number|marks
--------------------
  1          | 44
  2          | 55
  3          | 64
  4          | 98
  5          | 76

En utilisant les variables mysql définies par l'utilisateur, vous pouvez utiliser la requête suivante:

 set  @a:=0;select @a:=@a+1 serial_number, marks from student_marks;

Existe-t-il un moyen d'y parvenir dans msyql sans utiliser de variables définies par l'utilisateur?

24
sushil

En fonction des raisons pour lesquelles vous ne souhaitez pas utiliser les variables définies par l'utilisateur comme souhaitant éviter d'avoir deux requêtes, une pour l'initialisation et l'autre pour l'utiliser, vous pouvez utiliser les éléments suivants:

SELECT  @a:=@a+1 serial_number, 
        marks 
FROM    student_marks,
        (SELECT @a:= 0) AS a;
57
GarethD

La meilleure réponse à cette question devrait être la suivante, la meilleure pratique

SET @count:=0;
SELECT  (@count:=@count+1) AS serial_number, 
        marks 
FROM    student_marks
4
Kolajo

J'ai eu une table avec une colonne (c5) a contenir un nombre x, j'ai besoin d'une expression SQL qui répète la même ligne x nombre de fois:

mon tableau A contient:

c1  c2  c3  c4  c5
16  1   2   16  3
16  1   2   17  2 
16  1   2   18  1

et j'ai besoin:

c1  c2  c3  c4  c5  n
16  1   2   16  3   1
16  1   2   16  3   2
16  1   2   16  3   3
16  1   2   17  2   1
16  1   2   17  2   2
16  1   2   18  1   1

J'ai résolu ça avec l'expression:

SELECT
    c1, c2, c3, c4, c5, row_number AS n
FROM
    (
        SELECT
            @curRow := @curRow + 1 AS row_number
        FROM
            tablea
        JOIN (SELECT @curRow := 0) r
        WHERE
            @curRow < (
                SELECT
                    max(field1)
                FROM
                    tablea
            )
    ) AS vwtable2
LEFT JOIN tablea d ON vwtable2.row_number <= tablea.field1;
0
Giovanny Canasto

Non, il n'y en a pas. Mais vous pouvez produire le numéro de série du côté programme, pas celui de la base de données.

0
xdazz

Pourquoi n'en faites-vous pas un champ auto-incrémenté?

http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html

0
Mario The Spoon