Bonjour,

Pfiou, je sens que mon cas va être difficile à résumer...
J'ai une requête qui ressemble à ça, que je nomme requete1 (voir à la fin du post) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
SELECT element, count(element) AS nb 
FROM compound 
WHERE element IN 
( 
    SELECT element 
    FROM compound 
    WHERE single IN 
    ( 
        SELECT id FROM single 
        WHERE element IN 
        (
            SELECT id 
            FROM element_name 
            WHERE name IN ("element1","element2") 
        )
    ) 
    GROUP BY element 
    HAVING count(element) = 2
) 
GROUP BY element 
HAVING nb=2;
Elle me permet de savoir si un mélange de deux éléments ("element1" et "element2") existe dans ma base.
Je peux aussi la lancer avec deux autres éléments, element3 et element4...

Le résultat de la requête est ainsi :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
+----------+----+
| element  | nb |
+----------+----+
| 374      |  2 |
+----------+----+
1 row in set (0.00 sec)
-> j'ai un seul mélange (d'id 374) qui contient à la fois element1 et element2 (nb=2)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
+---------+----+
| element | nb |
+---------+----+
| 340     |  2 |
| 447     |  2 |
+------- -+----+
2 rows in set (0.00 sec)
-> j'ai deux mélanges (d'id 340 et 447) qui contient à la fois element3 et element4 (nb=2)

Ce qui m'intéresse ici c'est donc de récupérer le résultat du nombre de row de chaque requête donc "1 row" pour la première et "2 rows" pour la seconde.
Je n'arrive pas à ajouter un "count" sur la requête de base pour compter ce nombre de row.
Du coup je suis passé par une vue et cela fonctionne mais cela me semble un peu lourd :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
create view v as select element, count(element) as nb from compound where element in ( select element from compound where single in ( select id from single where element in (select id from element_name where name in ("element1","element2") )) group by element having count(element)=2) group by element having nb=2;
select count(*) from v ;
drop view v ;
Dans le premier cas j'obtiens :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
+----------+
| count(*) |
+----------+
|        1 |
+----------+
1 row in set (2.89 sec)
et dans le second :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
+----------+
| count(*) |
+----------+
|        2 |
+----------+
1 row in set (2.92 sec)
ce qui est parfait !!!
une idée pour faire le count directement dans ma requete1 ?
j'ai essayé

Code : Sélectionner tout - Visualiser dans une fenêtre à part
select count (*) (requete1) ;
mais j'ai une erreur de syntaxe...