Besoin d'un numéro de séquence pour chaque ligne de requête MySQL
J'ai donc trouvé cette grande utilisation:
SELECT (@row:=@row+1) AS ROW, ID
FROM TableA ,(SELECT @row := 0) r
ORDER BY ID DESC
La @row:=@row+1
fonctionne très bien, mais j'obtiens la ligne commandé par l'ID.
Mes tables ressembler à ceci:
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
Remarque:
J'ai remarqué que if I remove the JOINs I DO get the requested result
(Dans Lequel ROW
est le numéro d'ordre de chaque ligne, peu importe l'ORDRE d'ID). Le premier exemple fonctionne très bien, mais pour certains reaosn, les Jointures louper quelque sorte.
alors je me présente:
ROW | ID
3 15
2 10
1 2
Ce que je suis après est:
ROW | ID
1 15
2 10
3 2
Voici la SqlFiddle
Donc, essentiellement, il semble que le numéro de ligne est évaluée avant la ORDER BY
prend place. J'ai besoin de la ORDER BY
après la ligne a été donné.
Comment puis-je y parvenir?
OriginalL'auteur Ted | 2012-10-03
Vous devez vous connecter pour publier un commentaire.
Supprimer la
ORDER BY
:Voir SQL jouer avec la Démo
Alors si vous souhaitez utiliser un
ORDER BY
envelopper la requête dans un autreSELECT
:Ou si vous laissez la
ORDER BY
sur la requête, vous pouvez voir la façon dont le numéro de ligne est appliqué par tout simplement de jouer avec soitDESC
ouASC
ordre - Voir La DémoSi vous utilisez
DESC
ordreles résultats sont ce qui semble être le résultat que vous souhaitez:
Si vous utilisez
ASC
ordre:les résultats sont les suivants:
Modifier, en fonction de votre changement, vous devez placer le numéro de ligne dans une sous-requête, puis rejoindre les autres tables:
Voir SQL jouer avec la Démo
eh bien, c'est une question distincte de celle d'origine que vous avez demandé. s'il vous plaît créer un sql à jouer avec des exemples de données
l'as fait dans l' :edit:
Je suis désolé bluefeet, c'était modérateurs décision
voir mon edit, vous souhaitez utiliser une sous-requête pour attribuer le numéro de ligne et ensuite rejoindre sur elle.
OriginalL'auteur Taryn
Je ne trouve aucun problème avec votre requête
SQL Violon démo
OriginalL'auteur Joe G Joseph