2010-06-01 5 views
0

J'attache une autre pour limiter les requêtes sous MySQL, puisque MySQL 5 ne prend pas en charge mot-clé dans la limite sous-requête:limite sous-requête MySQL

SET @i = 0; 

SELECT BuildID, COUNT(TestCase) 
    from results R 
where R.BuildID IN (select B.BuildID 
         from build B 
         where (@i := (@i +1)) <= 25 
         and B.BuildID NOT LIKE 'Tx%' 
        order by B.buildid desc) 
group by R.BuildID 
order by R.id desc; 

mais je suis juste obtenir un resultset. Je n'arrive pas à comprendre pourquoi? Si j'exécute la sous-requête séparément, j'obtiens 6 BuildID

Répondre

0

En raison du regroupement group by R.BuildID. Si tous les résultats ont le même BuildID, ils seront tous une ligne.

Ou si le tableau des résultats ont seulement une ligne qui a le BuildID qui existe aussi dans la sous-requête

+0

la table a différents BuildID, et j'ai déjà mentionné que j'obtiens 6 BuildID si la sous-requête est exécutée seule. – JPro

+0

Vérifiez également que la table des résultats a plusieurs ID de build différents qui existent dans le résultat de la sous-requête (juste modifié ma réponse) – baloo

+0

La table des résultats a également plusieurs BuildID – JPro

0

D'après ce que je vois, @i est jamais remis à zéro dans la sous-requête. Disons que vous avez 25 enregistrements pour BuildID == 1. Dans ce cas @i == 25, et lorsque BuildID change en 2, (@i = @ i + 1) évalue à 26, donc vous sous-requête retourne toujours NULL pour tous les BuildID sauf le premier (ou quelques premiers BuildID, si vous avez moins de 25 enregistrements par BuildID).

Je dirais que vous devez changer votre requête et vous débarrasser de la sous-requête. Je ne suis pas sûr si je comprends exactement ce que vous voulez, mais je crois que vous voulez obtenir BuildID de la table de résultats pour laquelle dans le tableau build il n'y a pas plus de 25 entrées. Je suppose que B.PK_COLUMN est une clé primaire dans la table build.

SELECT R.BuildID, COUNT(R.TestCase),Count(B.PK_COLUMN) as cnt2 
from results R 
INNER JOIN from build B ON (B.BuildID = R.BuildID AND B.BuildID NOT LIKE 'Tx%') 
GROUP BY R.BuildID 
HAVING cnt2 <25; 
+0

alors, que dois-je faire? – JPro

+0

J'ai édité ma réponse et ajouté mes suggestions sur la façon de changer la requête. Vérifiez si cela fonctionne pour vous. – a1ex07

Questions connexes