Subquery returns more than 1 row??

Résolu
EL.marwaa123
Messages postés
99
Date d'inscription
jeudi 24 avril 2014
Statut
Membre
Dernière intervention
7 juin 2014
- Modifié par mounana199 le 18/05/2014 à 15:09
EL.marwaa123
Messages postés
99
Date d'inscription
jeudi 24 avril 2014
Statut
Membre
Dernière intervention
7 juin 2014
- 18 mai 2014 à 22:12
Bonjour,
salut j'ai un probleme concernant une requete voila la requete :
SELECT TYPE
FROM TYPE WHERE idT = ( 
SELECT idT FROM la3ba
WHERE idS = ( 
SELECT idS FROM smodule
WHERE nomS =  "ana" ) ) 

avec cette requete je veux afficher les nom des types associées à un sous module,j'ai 3 tables:type,sous module et une qui s'appelle la3ba qui associe la clé primaire de type avec clé primaire de sous module.
et l'erreur qui s'affiche est celui crée dans le titre .
pouvez vous m'aider svp ?merci d'avance

3 réponses

jordane45
Messages postés
35811
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
6 juillet 2022
358
18 mai 2014 à 16:05
Bonjour.
Oula.. des sous requêtes dans des sous requêtes. ..arghhh....

Orientes toi plutôt vers des jointures.

Si tu veux plus d'aide. ..il nous faudra la structure de tes tables. ..

0
jee pee
Messages postés
35297
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
5 juillet 2022
1
18 mai 2014 à 18:11
Salut,

Devant tes sous requêtes, tu pourrais remplacer le = par IN ainsi tu auras les multiples réponses qui pourront t'orienter.

cdlt
0
jordane45
Messages postés
35811
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
6 juillet 2022
358
Modifié par jordane45 le 18/05/2014 à 21:21
Bonjour,

Même si le IN devrait résoudre le souci du demandeur... il n'en reste pas moins que l'utilisation de sous requêtes en cascades est une mauvaise idée... surtout lorsque d'autres choix sont possibles..

Par exemple :

SELECT t.TYPE 
FROM    TYPE t
           , la3ba l
           , smodule s
WHERE t.idT = l.idT
AND l.idS = s.idS
AND s.nomS = "ana"


ou encore un truc du genre :

SELECT t.TYPE 
FROM    TYPE t
LEFT JOIN  la3ba l  ON (t.idT = l.idT)
LEFT JOIN  smodule s ON (l.idS = s.idS AND s.nomS = "ana")



Avant de poser une question, merci de lire la charte du site.
Cordialement, Jordane
0
EL.marwaa123
Messages postés
99
Date d'inscription
jeudi 24 avril 2014
Statut
Membre
Dernière intervention
7 juin 2014

18 mai 2014 à 21:54
merci pour ces explications tous ces reponses marche bien ,mais je suis débutante en sql donc j'ai pas assez de connaissances come vous.mais ce que j'ai appris ce que les requetes sans jointure sont les plus optimales surtout si c'est le cas d'une grande base de données. car une requete qui s'execute dans une seconde n'est pas similaire à une autre qui s'execute dans 2sec. est ce que c'est vrais? merci infiniment
0
jordane45
Messages postés
35811
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
6 juillet 2022
358
18 mai 2014 à 22:08
Disons plutôt que des sous requêtes c'est un peu comme faire des boucles... plus tu en mets..plus ça alourdi l'exécution du code.
0
EL.marwaa123
Messages postés
99
Date d'inscription
jeudi 24 avril 2014
Statut
Membre
Dernière intervention
7 juin 2014

18 mai 2014 à 22:12
ahhhh donc il faut les éviter merci bcp :)
0