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 38134 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 11 avril 2024 344
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 39557 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 11 avril 2024 2
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 38134 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 11 avril 2024 344
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 38134 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 11 avril 2024 344
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
Rejoignez-nous