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 :

Jointures "maison" et plusieurs clauses Where


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Octobre 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2010
    Messages : 30
    Points : 31
    Points
    31
    Par défaut Jointures "maison" et plusieurs clauses Where
    Bonjour à tous.

    Tout d'abord, attention aux yeux chastes, la requête qui suit peut faire peur.
    Il s'agit d'une requête censée me retourner les détails d'une location en même temps que la dernière facture mentionnant cette location.
    J'ai essayé de structurer le tout pour que ce soit plus lisible.

    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
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    SELECT
    	C.CODEENTITY, C.CIVILITE, C.NOM, C.PRENOM, C.REFERENCE, C.COMMENTAIRE, 
        CTC.TELEPHONEPORT, CTC.TELEPHONEFIXE, CTC.TELEPHONE3, CTC.TELEPHONE4, CTC.TELEPHONE5, CTC.FAX, CTC.MAIL, 
        CA.APPT, CA.VOIE, CA.BP, CA.CP, CA.VILLE, CA.PAYS, 
        R.CODEBANQUE, R.CODEGUICHET, R.NUMCOMPTE, R.CLEFRIB, R.BANQUE, 
        I.CODEPAYS, I.CLEFCONTROLE, I.BBAN, I.BIC, 
        S.CODEENTITY, S.NOM, S.SIRET, S.RCS, S.APE, 
        SC.TELEPHONEPORT, SC.MAIL, 
        SA.APPT, SA.VOIE, SA.BP, SA.CP, SA.VILLE, SA.PAYS, 
        B.NUM, B.LONGUEUR, B.LARGEUR, B.PORTE, B.ISOLATION, B.MEZZANINE, B.LOYER, B.COMMENTAIRE, 
        L.CODE, LB.DATEDEBUT, LB.DATEFIN, LB.REGLEMENT, LB.ECHEANCE, LB.PRIXLOCATION, LB.CAUTION, LB.ENCAISSEMENTCAUTION, 
        L.CODEPORTAIL, L.COURRIERFACTURE, L.MAILFACTURE, L.NUMLOC, L.CODESITE, 
        F.CODE, F.NUM, F.DATEFACTURE, 
        LF.CODELIGNE, LF.LIBELLE, LF.MONTANTBRUT, LF.TVA, LF.PRESTATION, LF.REGLEMENT, 
        CX.CODEENTITY, CX.CIVILITE, CX.NOM, CX.PRENOM, CX.REFERENCE, CX.COMMENTAIRE, 
        CTCX.TELEPHONEPORT, CTCX.TELEPHONEFIXE, CTCX.TELEPHONE3, CTCX.TELEPHONE4, CTCX.TELEPHONE5, CTCX.FAX, CTCX.MAIL, 
        CAX.APPT, CAX.VOIE, CAX.BP, CAX.CP, CAX.VILLE, CAX.PAYS, 
        RX.CODEBANQUE, RX.CODEGUICHET, RX.NUMCOMPTE, RX.CLEFRIB, RX.BANQUE, 
        IX.CODEPAYS, IX.CLEFCONTROLE, IX.BBAN, IX.BIC, 
        SX.CODEENTITY, SX.NOM, SX.SIRET, SX.RCS, SX.APE, 
        SCX.TELEPHONEPORT, SCX.MAIL, 
        SAX.APPT, SAX.VOIE, SAX.BP, SAX.CP, SAX.VILLE, SAX.PAYS, 
        BX.NUM, BX.LONGUEUR, BX.LARGEUR, BX.PORTE, BX.ISOLATION, BX.MEZZANINE, BX.LOYER, BX.COMMENTAIRE, 
        LX.CODE, LBX.DATEDEBUT, LBX.DATEFIN, LBX.REGLEMENT, LBX.ECHEANCE, LBX.PRIXLOCATION, LBX.CAUTION, LBX.ENCAISSEMENTCAUTION, 
        LX.CODEPORTAIL, LX.COURRIERFACTURE, LX.MAILFACTURE, LX.NUMLOC, LX.CODESITE 
    FROM 
        LMBLOCATION L INNER JOIN LMBLOCATION_BOX LB ON LB.CODELOCATION = L.CODE 
        INNER JOIN LMBBOX B ON B.NUM = LB.NUMBOX 
        INNER JOIN LMBSITE S ON S.CODEENTITY = B.CODESITE AND S.CODEENTITY = L.CODESITE 
        INNER JOIN LMBENTITYINTERFACE EIS ON EIS.CODE = S.CODEENTITY 
        INNER JOIN LMBADRESSE SA ON SA.CODE = EIS.CODEADRESSE 
        INNER JOIN LMBCONTACT SC ON SC.CODE = EIS.CODECONTACT 
        INNER JOIN LMBCLIENT C ON C.CODEENTITY = L.CODECLIENT 
        INNER JOIN LMBENTITYINTERFACE EIC ON EIC.CODE = C.CODEENTITY 
        INNER JOIN LMBADRESSE CA ON CA.CODE = EIC.CODEADRESSE 
        INNER JOIN LMBCONTACT CTC ON CTC.CODE = EIC.CODECONTACT 
        LEFT OUTER JOIN LMBRIB R ON R.CODEENTITY = EIC.CODE 
        LEFT OUTER JOIN LMBIBAN I ON I.CODEENTITY = EIC.CODE 
        LEFT OUTER JOIN LMBFACTURERUAUDIN F INNER JOIN LMBFACTURELIGNEINTERFACE_RUAUDIN FLI ON F.CODE = FLI.CODERUAUDIN 
        INNER JOIN LMBLIGNEFACTURE LF ON FLI.CODE = LF.CODELIGNE 
        LEFT OUTER JOIN LMBLOCATION LX ON LF.CODELOCATION = LX.CODE 
        LEFT JOIN LMBLOCATION_BOX LBX ON LBX.CODELOCATION = LX.CODE 
        LEFT JOIN LMBBOX BX ON BX.NUM = LBX.NUMBOX AND BX.CODESITE = LBX.CODESITE 
        INNER JOIN LMBSITE SX ON SX.CODEENTITY = LBX.CODESITE 
        INNER JOIN LMBENTITYINTERFACE EISX ON EISX.CODE = SX.CODEENTITY 
        INNER JOIN LMBADRESSE SAX ON SAX.CODE = EISX.CODEADRESSE 
        INNER JOIN LMBCONTACT SCX ON SCX.CODE = EISX.CODECONTACT 
        INNER JOIN LMBCLIENT CX ON CX.CODEENTITY = F.CODECLIENT 
        INNER JOIN LMBENTITYINTERFACE EIC ON EIC.CODE = CX.CODEENTITY 
        INNER JOIN LMBADRESSE CAX ON CAX.CODE = EICX.CODEADRESSE 
        INNER JOIN LMBCONTACT CTCX ON CTCX.CODE = EICX.CODECONTACT 
        LEFT OUTER JOIN LMBRIB RX ON RX.CODEENTITY = EICX.CODE 
        LEFT OUTER JOIN LMBIBAN IX ON IX.CODEENTITY = EICX.CODE 
    WHERE 
        S.CODEENTITY = '11111111-1111-1111-1111-bbbbbbbbbbbb' 
        AND NOT EXISTS (
    		SELECT 
                * 
            FROM 
                LMBFACTURERUAUDIN FY INNER JOIN LMBFACTURELIGNEINTERFACE_RUAUDIN FLIY ON FY.CODE = FLIY.CODERUAUDIN 
                INNER JOIN LMBLIGNEFACTURE LFY ON FLIY.CODE = LFY.CODELIGNE 
                INNER JOIN LMBLOCATION LY ON LFY.CODELOCATION = LY.CODE 
                INNER JOIN LMBLOCATION_BOX LBY ON LBY.CODELOCATION = LY.CODE AND LBY.NUMBOX = LFY.NUMBOX 
            WHERE 
                LY.CODE = L.CODE AND LBY.NUMBOX = B.NUM AND DATEDIFF(MONTH, F.DATEFACTURE, 2012/06/20) < LB.ECHEANCE 
        ) 
        AND EXISTS (
            SELECT 
                * 
            FROM 
    			LMBFACTURERUAUDIN FW INNER JOIN LMBFACTURELIGNEINTERFACE_RUAUDIN FLIW ON FW.CODE = FLIW.CODERUAUDIN 
    			INNER JOIN LMBLIGNEFACTURE LFW ON FLIW.CODE = LFW.CODELIGNE 
                INNER JOIN LMBLOCATION LW ON LFW.CODELOCATION = LW.CODE 
            WHERE 
    			LW.CODE = L.CODE AND FW.CODE = F.CODE 
        ) 
        AND F.DATEFACTURE = (
            SELECT 
                MAX FZ.DATEFACTURE 
            FROM 
    			LMBFACTURERUAUDIN FZ INNER JOIN LMBFACTURELIGNEINTERFACE_RUAUDIN FLIZ ON FZ.CODE = FLIZ.CODERUAUDIN 
                INNER JOIN LMBLIGNEFACTURE LFZ ON FLIZ.CODE = LFZ.CODELIGNE 
            WHERE 
                LFZ.CODELOCATION = L.CODE 
        ) 
    ORDER BY 
        LB.DATEDEBUT ASC, F.NUM ASC
    Voilà... C'est fait.
    Ma question porte sur l'enchaînement des clauses Where.
    Apparemment, on ne peut pas enchaîner plusieurs clauses Where, ou même enchaîner un test logique et une clause Where.

    A vue de pif, quelqu'un verrait-il une énormité que ma compétence somme toute limitée aurait laissé passer ?

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Points : 1 327
    Points
    1 327
    Par défaut
    Bonjour,

    je ne comprend pas ce que vous entendez par :

    "Apparemment, on ne peut pas enchaîner plusieurs clauses Where, ou même enchaîner un test logique et une clause Where"
    On le peut avec les AND comme vous l'avez fait

    Qu'est-ce qui vous pose problème, vous avez une erreur lors de l'execution de la requête ?


    EDIT :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LEFT OUTER JOIN LMBFACTURERUAUDIN F INNER JOIN LMBFACTURELIGNEINTERFACE_RUAUDIN FLI ON F.CODE = FLI.CODERUAUDIN
    Cette ligne est effectivement fausse, vous n'avez pas spécifié les modalités de jointure de F.

    Au passage vous risquez d'avoir un problème :

    Vous faites :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LEFT OUTER JOIN LMBFACTURERUAUDIN F
    Donc je peux supposer que parfois il n'y a pas de correspondance dans F.

    Puis vous faites :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND F.DATEFACTURE = ...
    Si F n'a pas de correspondance, F.DATEFACTURE sera null, et donc votre condition ci-dessus éliminera automatiquement votre ligne de votre résultat.
    Vous devez mettre cette condition dans votre jointure.

  3. #3
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 152
    Points : 1 414
    Points
    1 414
    Par défaut
    En effet, je ne vois pas pourquoi

    Juste un petit commentaire. Dans les EXISTS il est plus judicieux d'éviter les étoiles

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    .....
    AND EXISTS (
            SELECT 
                1 
            FROM 
    			LMBFACTURERUAUDIN FW INNER JOIN LMBFACTURELIGNEINTERFACE_RUAUDIN FLIW ON FW.CODE = FLIW.CODERUAUDIN 
    			INNER JOIN LMBLIGNEFACTURE LFW ON FLIW.CODE = LFW.CODELIGNE 
                INNER JOIN LMBLOCATION LW ON LFW.CODELOCATION = LW.CODE 
            WHERE 
    			LW.CODE = L.CODE AND FW.CODE = F.CODE 
        )
    .......

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    Citation Envoyé par dehorter olivier Voir le message
    Juste un petit commentaire. Dans les EXISTS il est plus judicieux d'éviter les étoiles
    Pourquoi ? Le select n'étant pas évalué, on peut vraiment écrire presque ce qu'on veut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select 1/0;
    -- Msg 8134, Level 16, State 1, Line 1
    -- Divide by zero error encountered.
     
    select 'Good' as c1 where exists (select 1/0);
     
    c1
    ----
    Good
    Certains écrivent *, d'autre 1, d'autre NULL, peu importe.
    Personnellement j'écris SELECT NULL, lu chez Tom Kyte, ça permet de montrer qu'on a compris que rien n'est évalué : j'ai apprécié et adopté cette approche.

    Précision au sujet du presque : l'expression n'est pas évaluée, mais elle est quand même syntaxiquement analysée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select 'a' * getdate();
    -- Msg 8117, Level 16, State 1, Line 1
    -- Operand data type varchar is invalid for multiply operator.
     
    select 'Good' as c1 where exists (select 'a' * getdate());
    -- Msg 8117, Level 16, State 1, Line 1
    -- Operand data type varchar is invalid for multiply operator.

  5. #5
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    J'ai commencé à remettre en forme ce monstre à partir de FROM, ce qui m'a permis d'y voir quelques choses surprenantes que j'ai notées en commentaire.
    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
    FROM 
        LMBLOCATION L 
        INNER JOIN LMBLOCATION_BOX LB ON LB.CODELOCATION = L.CODE 
    		INNER JOIN LMBBOX B ON B.NUM = LB.NUMBOX 
    			INNER JOIN LMBSITE S 
    				ON S.CODEENTITY = B.CODESITE 
    				AND S.CODEENTITY = L.CODESITE  -- 2 conditions de jointure pointant sur deux tables ! 
    				INNER JOIN LMBENTITYINTERFACE EIS ON EIS.CODE = S.CODEENTITY 
    					INNER JOIN LMBADRESSE SA ON SA.CODE = EIS.CODEADRESSE 
    					INNER JOIN LMBCONTACT SC ON SC.CODE = EIS.CODECONTACT 
        INNER JOIN LMBCLIENT C ON C.CODEENTITY = L.CODECLIENT 
    		INNER JOIN LMBENTITYINTERFACE EIC ON EIC.CODE = C.CODEENTITY 
    			INNER JOIN LMBADRESSE CA ON CA.CODE = EIC.CODEADRESSE 
    			INNER JOIN LMBCONTACT CTC ON CTC.CODE = EIC.CODECONTACT 
    			LEFT OUTER JOIN LMBRIB R ON R.CODEENTITY = EIC.CODE 
    			LEFT OUTER JOIN LMBIBAN I ON I.CODEENTITY = EIC.CODE 
        LEFT OUTER JOIN LMBFACTURERUAUDIN F -- manque condition de jointure !
    		INNER JOIN LMBFACTURELIGNEINTERFACE_RUAUDIN FLI ON F.CODE = FLI.CODERUAUDIN 
    			INNER JOIN LMBLIGNEFACTURE LF ON FLI.CODE = LF.CODELIGNE 
    				LEFT OUTER JOIN LMBLOCATION LX ON LF.CODELOCATION = LX.CODE 
    					LEFT JOIN LMBLOCATION_BOX LBX ON LBX.CODELOCATION = LX.CODE 
    						LEFT JOIN LMBBOX BX 
    							ON BX.NUM = LBX.NUMBOX 
    							AND BX.CODESITE = LBX.CODESITE 
    						INNER JOIN LMBSITE SX ON SX.CODEENTITY = LBX.CODESITE 
    							INNER JOIN LMBENTITYINTERFACE EISX ON EISX.CODE = SX.CODEENTITY 
    								INNER JOIN LMBADRESSE SAX ON SAX.CODE = EISX.CODEADRESSE 
    								INNER JOIN LMBCONTACT SCX ON SCX.CODE = EISX.CODECONTACT 
    		INNER JOIN LMBCLIENT CX ON CX.CODEENTITY = F.CODECLIENT 
    			INNER JOIN LMBENTITYINTERFACE EICX ON EIC.CODE = CX.CODEENTITY 
    				INNER JOIN LMBADRESSE CAX ON CAX.CODE = EICX.CODEADRESSE 
    				INNER JOIN LMBCONTACT CTCX ON CTCX.CODE = EICX.CODECONTACT 
    				LEFT OUTER JOIN LMBRIB RX ON RX.CODEENTITY = EICX.CODE 
    				LEFT OUTER JOIN LMBIBAN IX ON IX.CODEENTITY = EICX.CODE 
    WHERE 
        S.CODEENTITY = '11111111-1111-1111-1111-bbbbbbbbbbbb' 
        AND NOT EXISTS (
    		SELECT 
                * 
            FROM 
                LMBFACTURERUAUDIN FY 
                INNER JOIN LMBFACTURELIGNEINTERFACE_RUAUDIN FLIY ON FY.CODE = FLIY.CODERUAUDIN 
    				INNER JOIN LMBLIGNEFACTURE LFY ON FLIY.CODE = LFY.CODELIGNE 
    					INNER JOIN LMBLOCATION LY ON LFY.CODELOCATION = LY.CODE 
    						INNER JOIN LMBLOCATION_BOX LBY 
    							ON LBY.CODELOCATION = LY.CODE 
    							AND LBY.NUMBOX = LFY.NUMBOX -- 2 conditions de jointure pointant sur deux tables ! 
            WHERE 
                LY.CODE = L.CODE 
                AND LBY.NUMBOX = B.NUM 
                AND DATEDIFF(MONTH, F.DATEFACTURE, 2012/06/20) < LB.ECHEANCE 
        )
    Je vous laisse continuer le boulot d'indentation, ça rend les requêtes plus agréables et faciles à lire et à débugguer.

    Vous l'avez essayée votre requête ?
    Elle fonctionne ?

    Tenez compte aussi des remarques de mes prédécesseurs.

    Je me trompe peut-être mais j'ai quand même l'impression que ce monstre doit pouvoir être réduit. Difficile à dire cependant sans le modèle de données.

  6. #6
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 170
    Points : 7 422
    Points
    7 422
    Billets dans le blog
    1
    Par défaut
    Je suis ne pas complètement sûr de moi, mais à vérifier quand même...

    Il me semble que le premier NOT EXISTS peut être remplacé par un LBX.CODELOCATION IS NULL
    Je n'ai regardé que le premier, car j'ai lu à partir de l'indentation fournir par CinePhil

    Mais les conditions de jointure/filtre m'ont l'air identiques entre le FROM principal et celui de la sous-requête.
    Et vu que LBX est en jointure ouverte dans le FROM principale, la condition de non existante de la même chose avec une jointure interne, d'après moi, c'est simplement que la jointure ouverte ne soit pas respectée, donc la clé de la table jointe nulle.

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Octobre 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2010
    Messages : 30
    Points : 31
    Points
    31
    Par défaut
    Bonjour à tous et merci sincèrement de votre aide et de vos remarques.

    Je réponds rapidement maintenant car je suis au travail.

    La jointure qui n'a pas de condition correspond au début des champs qui correspondent à la dernière facture émise pour la location.
    Les données retournées pour la requête peuvent se diviser en deux parties :
    1ère partie jusqu'à L.CODESITE (ligne 12) qui correspond à la location (et ses détails, client, site...)
    2ème partie qui correspond à la dernière facture émise pour la location. Il n'y a pas forcément de dernière facture (dans le cas d'une nouvelle location par exemple), d'où le LEFT OUTER JOIN sur la table LMBFACTURE.

    Est-ce une erreur de ma part de faire une telle jointure ?

    Les 2 conditions de jointure pour l'alias EIS correspondent en fait à une table d'interfaçage entre une entité (site de location ou client), une adresse et un contact.

    Encore une fois, merci de votre aide précieuse.
    N'hésitez pas m'apporter toute remarque, je prends tout !

  8. #8
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 170
    Points : 7 422
    Points
    7 422
    Billets dans le blog
    1
    Par défaut
    Un LEFT OUTER JOIN sans ON, ça ne marche pas.
    Normalement ça plante, et au pire ça va faire une sorte de produit cartésien bizarre.

    En tout cas, c'est clairement une erreur.

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Octobre 2010
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2010
    Messages : 30
    Points : 31
    Points
    31
    Par défaut
    J'ai n'ai aucune jointure à faire sur cette table, donc je peux très bien remplacer le left outer join par une virgule non ? Cela résoudrait le problème de jointure foireuse...

    D'autre part, je n'ai pas répondu à tout le monde.
    asmduty, l'erreur que j'avais : "erreur vers le mot WHERE". Très vague non ?

  10. #10
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Points : 1 327
    Points
    1 327
    Par défaut
    Je ne comprends pas comment il se peut que tu ne puisse pas lier F avec le reste
    Si c'est vraiment le cas tu ne peux pas faire cette requête, tu auras un produit cartésien.
    Et non, on ne peut pas remplacer le left outer join par une virgule
    Si j'ai bien compris, le principe c'est d'afficher des infos d'une location et de la dernière facture de cette location.
    Tu dois forcément avoir quelque chose qui lie la facture et la location, c'est là-dessus que tu dois faire ta jointure.

Discussions similaires

  1. LINQ avec plusieurs clauses WHERE et C#
    Par Cedric33 dans le forum Linq
    Réponses: 23
    Dernier message: 22/11/2011, 14h29
  2. Variable d'une clause where avec quote
    Par kcizth dans le forum Langage SQL
    Réponses: 1
    Dernier message: 17/04/2008, 15h43
  3. ORACLE 9.2 : Création d'une vue avec plusieurs clauses WHERE
    Par soffinette dans le forum Administration
    Réponses: 4
    Dernier message: 01/02/2007, 10h51

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