IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

[Débutant] sous requete à valeurs multiples [Fait]


Sujet :

Langage SQL

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2007
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 16
    Points : 1
    Points
    1
    Par défaut [Débutant] sous requete à valeurs multiples
    Bonjour à tous

    j'ai 2 tables

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Table option vehicule
    
    num_interne           code         description
     3184                  01          Boite automatique
     3184                  02          Radio Laser
     3184                  03          ABS
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Table vehicule
    
    num_interne       immatriculation    couleur    ...
       3184              4521CV12        bleu
       3185              4769VB34        rouge
    Ainsi le véhicule n° 3184 a plusieurs options

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Ma requete est :
    
    SELECT tableoption.description FROM tableoption
    WHEREtableoption.num_interne=tablevehicule.numinterne
    Le soucis c'est qu'il me dit : "la sous requete a renvoyé plusieurs valeurs"
    et la requete ne fonctionne pas
    Merci
    Laurent

  2. #2
    Membre éprouvé Avatar de Mathusalem
    Profil pro
    IT moa
    Inscrit en
    Décembre 2003
    Messages
    1 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : IT moa

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 008
    Points : 1 067
    Points
    1 067
    Par défaut
    je pense que tu as besoin de lire ça : http://sql.developpez.com/sqlaz/jointures/


    Bon courage, ton problème est simpliste

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2007
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 16
    Points : 1
    Points
    1
    Par défaut
    Alors c'est grave car j'ai deja parcouru ce tutorial et j'ai pas trouver la reponse !!!!


    Si quelqu'un veut bien m'aider ou me donner une piste car la dans le tutorial jointure je suis perdu !!!

  4. #4
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 644
    Points
    4 644
    Par défaut
    allez, 1ere indice : pour faire une jointure il faut 2 tables. ici tu n'en indique qu'une dans le FROM

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2007
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 16
    Points : 1
    Points
    1
    Par défaut
    En fait j'arrive pas a bien comprendre la notion de jointure car si tous les vehicules n'avait qu'une option la requete fonctionne tres bien pourtant j'ai le meme nombre de table.

  6. #6
    Membre éprouvé Avatar de Mathusalem
    Profil pro
    IT moa
    Inscrit en
    Décembre 2003
    Messages
    1 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : IT moa

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 008
    Points : 1 067
    Points
    1 067
    Par défaut
    Citation Envoyé par laurent26_llf Voir le message
    En fait j'arrive pas a bien comprendre la notion de jointure car si tous les vehicules n'avait qu'une option la requete fonctionne tres bien pourtant j'ai le meme nombre de table.
    si tous les véhicules n'avaient qu'une seule option possible, tu aurais une seule table, avec les infos du véhicule et à la fin une colonne avec l'option.

    en vieux SQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *
    FROM tableoption, tablevehicule
    WHERE tableoption.num_interne=tablevehicule.numinterne
    en mieux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *
    from tableoption as o inner join tablevehicule as v
                 on v.num_interne = o.num_internet

  7. #7
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2007
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 16
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup mais la requete, a priori ne fonctionne pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Microsoft ODBC SQL Server Driver SQL Server Une seule expression
    peut être spécifiée dans la liste de sélection quand la 
    sous-requête n'est pas introduite par EXISTS.

  8. #8
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2007
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 16
    Points : 1
    Points
    1
    Par défaut
    Bonjour à tous,

    Personne pour me dépatouiller ???

  9. #9
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 039
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 039
    Points : 23 787
    Points
    23 787
    Par défaut
    Bonjour,
    Quelle requête tapes-tu pour obtenir le dernier message d'erreur ?
    Sinon, aux erreurs de frappe près , la requête proposée par Mathusalem devrait fonctionner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *
    FROM tableoption AS o INNER JOIN tablevehicule AS v
                 ON v.num_interne = o.num_interne
    ced

  10. #10
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2007
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 16
    Points : 1
    Points
    1
    Par défaut
    j'ai re-controlé et re-saisie le meme message d'erreur apparait :

    Microsoft ODBC SQL Server Driver SQL Server Une seule expression
    peut être spécifiée dans la liste de sélection quand la
    sous-requête n'est pas introduite par EXISTS

    Je rajoute le résultat escompté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Resultat
     
    num_interne       Option    Option     Option
       3184          Boite auto  Rasio laser  ABS
       3185

  11. #11
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 039
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 039
    Points : 23 787
    Points
    23 787
    Par défaut
    Ah, mais la requête qu'on te donne est en fait une partie d'une grosse requête ? Et elle est introduite par un EXISTS, non ?
    Si c'est ça, il faut virer l'étoile et la remplacer par 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT...
    FROM...
    WHERE EXISTS (
       SELECT 1
       FROM tableoption AS o INNER JOIN tablevehicule AS v
                 ON v.num_interne = o.num_interne)
    N'empêche que c'est bizarre, comme requête...

    ced

  12. #12
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2007
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 16
    Points : 1
    Points
    1
    Par défaut
    oui en effet elle fait partie d'un ensemble de requete mais il n'y a pas EXISTS

  13. #13
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 039
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 039
    Points : 23 787
    Points
    23 787
    Par défaut
    Bizarre
    Peux-tu nous montrer alors la requête dans son contexte ?

    ced

  14. #14
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2007
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 16
    Points : 1
    Points
    1
    Par défaut
    Voici la requete complete :
    - en gras la partie concernée par le post
    - précision : les autres requetes fonctionnent sans problème !
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    SELECT   
    ltrim(rtrim(tgPtoVenta.DescripCorto)) 				                                        as 'Soc/Lieu',
    tcVeh.NumStock 											AS 'No Stock',
    (cast(convert(char(12),'1-1-2050',103) as datetime) - CONVERT(CHAR(12),TCVEH.FECCOMPRA,103))	AS 'Nb Jrs de Stock',
    TcVeh.VendedorRecompra 										as 'Acheteur',
    (Select tgmarca.descrip from tgmarca
           where tgmarca.marca=tcveh.marca)      							as 'Marque',
    (Select ltrim(rtrim(tgversion.descrip)) from tgversion
     	where tgversion.marca=tcveh.marca
     	and tgversion.modelo=tcveh.modelo
     	and tgversion.version=tcveh.version)							as 'Modele/Version',
    replace(tcVeh.Combustible,'NULL','') 								AS 'Energie',
    CONVERT(CHAR(12), TCVEH.FECMATRICPRIMERA, 103) 							AS 'Date Mec',
    tcVeh.Km 											AS 'Kms',
    (SELECT SUM(CompraPrecio * Cdad) From tcVehOpcion 
    	Where tcVehOpcion.Emp = tcVeh.Emp 
    	AND tcVehOpcion.Numinterno = tcVeh.NumInterno 
    	AND tcVehOpcion.TipoLinea =  'A') 							As "Tot Achat",
    (select Rtrim(Ltrim(tcColor.Descrip)) from tccolor 
    	where TcColor.Marca = tcveh.marca 
    	and TcColor.Color = Tcveh.Color)							AS 'Couleur',
    replace(tcVeh.PotenciaFiscal,'NULL','') 							AS 'Pu Fisc',
    ltrim(rtrim(replace(tcVeh.Matric,'NULL',''))) 							AS 'Immat',
    tcveh.AutCirculacion										AS 'Type Mine',
    tcVeh.Chasis											AS 'N° Chassis',
    (Select tcvodestino.descrip from tcvodestino
           where tcvodestino.codigo=tcveh.vodestino) 						AS 'Destination VO',
    
    
         	--'Vendu' = CASE tcVeh.Status WHEN  30 THEN 'OUI' ELSE 'NON' END,
    Case TcVeh.Reservado 	WHEN 1 Then 'OUI' 
    			ELSE 'NON' 
    END												AS 'Reservé',
    
    Case	When	tcVeh.Rebu <> 1 Then TcvehOpcion.VentaPrecio * (1+((Select Porcen from tgIvaPor Where tcVehOpcion.IvaVenta= tgIvaPor.Codigo) /100))
    	Else 	TcvehOpcion.VentaPrecio						
    End												AS 'Prix Vte Prevu TTC',
    (SELECT tcvehopciongeneric.descrip FROM tcvehopciongeneric, tcveh
    WHERE tcvehopciongneric.numinterno=tcveh.numinterno)							AS 'Option',							
    
    replace(replace(replace(tcVeh.Obser,CHAR(13),''),CHAR(10),''),CHAR(9),' ') 			AS 'Remarque'
         	 						   	
    FROM    tcVeh ,
    	tgEmpresa, 
    	TgPtoVenta ,
    	tcVehOpcion 
    
    	
    WHERE	tcVehOpcion.TipoLinea='A'
    	and tcVeh.Emp = tcVehOpcion.Emp
            and tcVeh.NumInterno = tcVehOpcion.Numinterno  
         	And TgEmpresa.Emp=Tcveh.Emp
         	And TgPtoVenta.PuntoVenta = Tcveh.PuntoVenta 
         	--AND ((tcveh.baja = 0) or (tcveh.baja is null))
    	AND (((tcVeh.baja = 0) or (tcVeh.baja is null)) or (cast(convert(char(12),tcVeh.bajafec,103) as datetime) <= cast(convert(char(12),'1-1-2050',103) as datetime)))
         	
     -- Options de liste A ajouter 
         	and TCVEH.EsVO = 1 -- Que les Veh Occase
    	--and TCVEH.EsVO = 0 -- Que les Veh Neufs
    	--and TCVEH.Status = 30  -- Que les Vehicules Vendus
    	--and TCVEH.Status < 30 -- Que les Vehicules Non Vendus
    	--and TCVEH.Reservado = 0  -- Que les Vehicules Non Reserves
    	--and TCVEH.Reservado = 1  -- Que les Vehicules Reserves
    	--And tcVeh.NumStock <> 0    -- Pas les Véhicules en Commande
    	-- Date d'achat inférieure ou égale à la date de référence
    	AND (cast(convert(char(12),TCVEH.FECCOMPRA,103) as datetime) <= cast(convert(char(12),'1-1-2050',103) as datetime))    -- DATE d'ACHAT
    	-- Date de vente Supérieure à la date de référence ou date de vente Nulle
    	AND ((Cast(CONVERT(CHAR(12), TCVEH.FecVenta, 103) as DateTime) > cast(convert(char(12),'1-1-2050',103) as datetime)) OR  (TCVEH.FecVenta is Null) OR (Rtrim(Ltrim(tcVeh.FecVenta))=''))     -- DATE DE VENTE
    	
    ORDER BY tcVeh.Emp,
             tgPtoVenta.DescripCorto,
             tcVeh.NumStock,
             tcVeh.Marca,
    	 TCVEH.FECCOMPRA -- date d'achat

  15. #15
    Membre régulier
    Inscrit en
    Septembre 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 63
    Points : 71
    Points
    71
    Par défaut
    Je pencherai bien pour cette solution

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT VEH.num_interne, OPT.description
    FROM tablevehicule VEH, tableoption OPT
    where VEH.num_interne = OPT.num_interne 
    OPT.code IN (SELECT OPT2.code FROM tableoption OPT2 where OPT2.num_interne = OPT.num_interne and OPT2.code = OPT.code)

  16. #16
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2007
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 16
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Lux08 Voir le message
    Je pencherai bien pour cette solution

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT VEH.num_interne, OPT.description
    FROM tablevehicule VEH, tableoption OPT
    where VEH.num_interne = OPT.num_interne 
    OPT.code IN (SELECT OPT2.code FROM tableoption OPT2 where OPT2.num_interne = OPT.num_interne and OPT2.code = OPT.code)

    il me met : syntaxe incorrecte vers 'OPT'

  17. #17
    Membre régulier
    Inscrit en
    Septembre 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 63
    Points : 71
    Points
    71
    Par défaut
    J'ai oublié un AND

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT VEH.num_interne, OPT.description
    FROM tablevehicule VEH, tableoption OPT
    WHERE VEH.num_interne = OPT.num_interne AND
    OPT.code IN (SELECT OPT2.code FROM tableoption OPT2 WHERE OPT2.num_interne = OPT.num_interne AND OPT2.code = OPT.code)

  18. #18
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2007
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 16
    Points : 1
    Points
    1
    Par défaut
    meme message d'erreur :

    Microsoft ODBC SQL Server Driver SQL Server Une seule expression
    peut être spécifiée dans la liste de sélection quand la
    sous-requête n'est pas introduite par EXISTS

  19. #19
    Membre régulier
    Inscrit en
    Septembre 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 63
    Points : 71
    Points
    71
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT VEH.num_interne, OPT.description
    FROM tablevehicule VEH, tableoption OPT
    WHERE VEH.num_interne = OPT.num_interne AND
    OPT.code IN (SELECT OPT2.code FROM tableoption OPT2 WHERE OPT2.num_interne = OPT.num_interne)
    Mince j'ai pas mon editeur je peux pas vérifier mes requetes
    Essais cette version

  20. #20
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2007
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 16
    Points : 1
    Points
    1
    Par défaut
    idem désolé

Discussions similaires

  1. Probleme de multiplication avec valeurs de sous requete
    Par fred_vannes56 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 21/05/2008, 14h34
  2. Réponses: 13
    Dernier message: 27/08/2007, 12h16
  3. [débutant] Affichage requetes et sous requetes
    Par max63_ dans le forum Access
    Réponses: 2
    Dernier message: 09/03/2006, 15h23
  4. Optimisation requete avec sous-requetes multiples
    Par gege.boubou dans le forum Requêtes
    Réponses: 3
    Dernier message: 08/09/2005, 10h42
  5. [Débutante]Sous requete
    Par mimi74 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 19/07/2004, 14h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo