2010-10-31 3 views
0

Quel est le problème avec cette requête?compte pour chaque ligne

SELECT *, (SELECT COUNT(*) 
FROM 
(
    SELECT NULL 
    FROM words 
    WHERE project=projects.id 
    GROUP BY word 
    HAVING COUNT(*) > 1 
) T1) FROM projects 

MySQL retourne 1054 Unknown column 'de projects.id' dans 'où la clause'

Merci

+1

Quelle est la structure de la table? Quelle est la requête supposée renvoyer? –

Répondre

6

Est-ce que cela fonctionne?

SELECT *, (SELECT COUNT(*) 
    FROM words 
    WHERE words.project=projects.id) as pCount 
FROM projects 
+0

J'étais sur le point d'afficher les détails de la structure quand j'ai vu votre message qui a fait l'affaire! pouces vers le haut! – fabjoa

2

Votre sous-requête interne ne sait rien au sujet de la requête externe, de sorte que la table projects ne sont pas disponibles.

+0

comment pourrais-je le faire savoir? Si je fais un projet JOIN, il compte tous les mots quel que soit le projet – fabjoa

+0

@fabjoa: Pourriez-vous nous montrer la structure de votre table, et un exemple de la sortie attendue? –

+0

btw, félicitations pour l'insigne d'or mySQL! –

2

Il semble que vous essayez de compter pour chaque projet le nombre de mots qui surviennent plusieurs fois.

Vous pouvez exécuter votre sous-requête pour tous les projets, puis utiliser un JOIN pour obtenir le reste des données de la table des projets:

SELECT projects.*, COUNT(word) AS cnt 
FROM projects 
LEFT JOIN (
     SELECT project, word 
     FROM words 
     GROUP BY project, word 
     HAVING COUNT(*) > 1 
) T1 
ON T1.project = projects.id 
GROUP BY projects.id 

Résultat:

 
id cnt 
1 0 
2 1 
3 2 

données de test:

CREATE TABLE projects (id INT NOT NULL); 
INSERT INTO projects (id) VALUES (1), (2), (3); 

CREATE TABLE words (project INT NOT NULL, word VARCHAR(100) NOT NULL); 
INSERT INTO words (project, word) VALUES 
(1, 'a'), 
(2, 'a'), 
(2, 'b'), 
(2, 'b'), 
(3, 'b'), 
(3, 'b'), 
(3, 'c'), 
(3, 'c'); 
Questions connexes