Alternative à l'utilisation de LIMITE de mot-clé dans une sous-Requête MYSQL
J'ai un TEST de la table avec les colonnes suivantes :
code_ver (VARCHAR)
suite (VARCHAR)
date (DATE)
Maintenant, je veux sélectionner les 10 lignes avec une valeur distincte de code_ver & code_ver NOT LIKE '%DevBld%' sorted by date desc.
J'ai donc écrit la requête suivante:
select *
from test
where code_ver IN (select DISTINCT code_ver
from test
where code_ver NOT LIKE '%DevBld%'
ORDER by date DESC LIMIT 10);
Cette requête doit idéalement travail, mais ma version de MySQL dit :
Cette version de MySQL ne supporte pas encore 'LIMIT & DANS le/TOUTES les/TOUTES les/CERTAINS
sous-requête'
Quelqu'un peut-il me suggérer une alternative à cette requête?
Nous montrer des exemples de données et les résultats que vous voulez.
OriginalL'auteur Pi Horse | 2012-10-10
Vous devez vous connecter pour publier un commentaire.
L'erreur que vous obtenez n'est pas exactement à cause de la version de MySQL. Je pense que toutes les versions de soutenir que. Vous devez modifier la LIMITE de 10 place et le placer après ")". Laissez-moi savoir si cela fonctionne pour vous. J'ai couru l'un soufflet sur la mienne et ça fonctionne.
E. g.
Mise à jour: Essayez de celui-ci, de cette façon serait de l'ordre de travail:
Démarrer à partir d'SÉLECTIONNEZ *. La première ligne!
Il fonctionne pas si il y a plusieurs lignes associer avec le nom cela vous montre à 10 lignes pour
test
table. Je pense que ce n'est pas la bonne solution de la question.La table dérivée réponse semble être la plus correcte.
OriginalL'auteur Sara
Réponse suggérée par Layke est mal dans mon domaine de compétences. L'Intention de l'aide de la limite dans la sous-requête est donc principal l'exécution de la requête sur un nombre limité d'enregistrements récupérés à partir de la sous-requête. Et si nous continuons à nous limiter à l'extérieur, alors il fait limite inutile pour la sous-requête.
Depuis mysql ne supporte pas encore de limite dans la sous-requête, au lieu de cela, vous pouvez utiliser JOINDRE comme suit:
Si nous requête comme un dérivé de la source de données pour d'autres requêtes comme interlocuteur a mis en "select * from test where code_ver IN (select DISTINCT code_ver de test où code_ver PAS LIKE '%DevBld%' ORDER by date DESC LIMIT 10); " puis nous appelons sous-requête, mais comme par mysql règles actuelles de la LIMITE n'est pas autorisé à sous-requête qui est pourquoi j'ai proposé une JOINTURE qui sert le but.
OriginalL'auteur aneetkukreja
Mettre la sous-requête dans une table dérivée:
(Vous pouvez aussi JOINTURE DROITE qui, bien sûr, et de les déposer à l'extérieur OÙ la condition.)
alors je ne comprends pas ce que vous étiez en train de faire. Supposons que vous avez
CREATE TABLE t SELECT DISTINCT code_ver ... LIMIT 10
, et a ensuite essayé votre requête d'origine avecWHERE code_ver IN (SELECT code_ver FROM t)
. Je m'attends que vous souhaitez toujours arriver 84 lignes.J'ai juste exécuté la requête que vous avez écrit ci-dessus
OriginalL'auteur pilcrow
Vous pouvez également utiliser la même requête, par le simple ajout d'une couche supplémentaire de les sélectionner avant de sous-requête. et c'est tout. Il va travailler.
OriginalL'auteur yash