(Exécution de la version nuage MS Azure de MySQL - CleadDB)MySQL LIMIT le renvoi incorect ensemble de lignes
J'ai une requête simple:
SELECT idx, date_added FROM my_table ORDER BY idx ASC LIMIT 100752, 10
J'attends pour obtenir 10 enregistrements après l'IDX 100752 (si présent). Cependant, je reçois des documents totalement différents à savoir:
J'ai vérifié les dossiers sont présents alors j'ai couru à nouveau la requête, cette fois avec les disques que je connais sont là à savoir: encore
SELECT idx, date_added FROM my_table ORDER BY idx ASC LIMIT 102366, 10
I Obtenez à nouveau les lignes sans correspondance suivantes.
Je sais que je fais sans doute quelque chose de stupide. Aide appréciée.
EDIT/MISE À JOUR: j'ai suivi quelques-unes des suggestions ci-dessous et testé les résultats en utilisant WHERE prédicat spécifique plutôt que LIMITER fonction. S'il vous plaît voir les résultats ci-dessous. Les deux requêtes devraient retourner le même résultat - ou alors je m'attendrais.
Test 1:
SELECT idx, date_added FROM attachments ORDER BY idx ASC LIMIT 67805, 20
ESSAI 2:
SELECT
idx, date_added
FROM attachments
WHERE
idx >=67805 and idx <67825
ORDER BY idx ASC
Je m'attendrais à ce que les deux soient les mêmes mais ce n'est pas le cas.
SOLUTION: LIMIT ne se soucie pas de la clé d'auto-incrémentation primaire. Il se soucie du nombre de lignes (quel que soit leur index) donc même si l'idx est SORTed - quand certaines lignes sont manquantes (ce qui signifie qu'il y a eu des suppressions dans le passé), il compensera les résultats en fonction du nombre de lignes supprimées. Thx tout.
run: 'SELECT max (IDX), COUNT (*) de attachments' et voir les résultats – RIKI
@OTARIKI oui thx, et qui ne retourne rien! WTH? – Milan
@GurV êtes-vous sérieux? – Milan