J'ai une table avec 2 colonnes, nom et identifiant avec les valeurs suivantes
Nom Student_ID
prise 231
dave 425
mike 001
lis 128
liam 358
Je voudrais ajouter une nouvelle colonne à ce résultat avec des valeurs de séquence incrémentées automatiquement.
J'ai essayé d'utiliser la requête ci-dessous. Mais j'obtiens une erreur comme décrit ci-dessous
Requête:
Name Student_ID Serial jack 231 1 dave 425 2 mike 001 3 lily 128 4 liam 358 5
Résultat attendu:
SELECT @n := @n +1 n, name, id FROM table1, (SELECT @n := 0) m ORDER BY id Error: ERROR: syntax error at or near ":=" LINE 2: SELECT @n := @n +1 n,
p >
4 Réponses :
essayez avec row_number()
SELECT row_number()over(order by id) n, name, id FROM table1 ORDER BY id
utilisez row_number
, cela fonctionne sur Postgres
select *, row_number() over(order by id) as serial from table1
Votre code @n: = @n + 1
est la solution de contournement de MySQL pour son manque de fonctions de fenêtrage (par exemple, row_number
) sur ses anciennes versions. Le dernier MySQL a maintenant des fonctions de fenêtrage. Vous pouvez simplement utiliser row_number
, pas besoin de contournement.
Et vous n'avez même pas besoin de ce contournement dans Postgres. Il a des fonctions de fenêtrage bien avant presque tout le monde
utilisez row_number()
select name, student_id, row_number() over(order by student_id) as serial from tablename
Votre code me semble être MySQL, pas du code Postgres. Votre erreur s'exécute sur Postgres, mais Postgres n'autorise généralement pas l'utilisation des variables utilisateur dans les requêtes SQL régulières. Lors de l'exécution de votre requête sur MySQL, j'obtiens une erreur indiquant que la colonne id
n'existe pas.
Mais, dans tous les cas, Postgres a pris en charge la fonction analytique ROW_NUMBER
pour depuis longtemps, alors utilisez-le à la place:
SELECT Name, Student_ID, ROW_NUMBER() OVER (ORDER BY Student_ID) Serial FROM table1 ORDER BY Student_ID;
Utilisez-vous vraiment Postgres? Ou utilisez-vous MySQL?
@TimBiegeleisen C'est Postgres, sinon ce ne serait pas une erreur de syntaxe si c'est MySQL. Peut-être qu'il utilise MySQL dans la vie passée
@MichaelBuen En fait, c'est aussi une erreur sur MySQL, car la table décrite par l'OP n'a pas de colonne
id
.@TimBiegeleisen Hmm .. ne devrait-il pas être "champ id introuvable"? Pas une erreur de syntaxe?
C'est une erreur de syntaxe :-)
C'est
champ id introuvable
, pour être exactl'ID de colonne n'existe pas
, pas une erreur de syntaxe. Je pensais que Posgtres devenait ridicule de signaler le champ manquant comme une erreur de syntaxe. J'ai donc essayé: db-fiddle.com/f/2LuQVjh4PEiHvUNNnspFDF/0@TimBiegeleisen Je me suis concentré sur l'erreur de syntaxe, on peut en déduire que c'est MySQL s'il n'y a pas d'erreur de syntaxe, donc je ne méritais pas ça
bien en fait
tirania.org/blog/archive/2011/Feb-17.html