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

Requêtes MySQL Discussion :

Erreur FULL OUTER JOIN


Sujet :

Requêtes MySQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 12
    Points : 8
    Points
    8
    Par défaut Erreur FULL OUTER JOIN
    Bonjour,

    Voilà mon problème j'essaye d'éxécuter une requête de jointure externe complète qui est la suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT *
    FROM `tmp_dep1`
    FULL OUTER JOIN `tmp_dep2` ON `tmp_dep1`.`NOM_DDV` = `tmp_dep2`.`NOM_DDV`
    LIMIT 0 , 30
    Hélas elle ne passe pas et voici le message d'erreur

    MySQL a répondu

    #1064 - Erreur de syntaxe près de 'outer join `tmp_dep2` on `tmp_dep1`.`NOM_DDV` = `tmp_dep2`.`NOM_' à la ligne 1

    Pourtant la requête est bien écrite. Si quelqu'un pourrai m'éclairer

    Merci d'avance

  2. #2
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Y a t il un moyen d'arriver au même résultat qu'avec FULL OUTER JOIN, car elle correspondait vraiment à ce que je voulais

  4. #4
    Membre confirmé Avatar de milia
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juillet 2006
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Juillet 2006
    Messages : 481
    Points : 532
    Points
    532
    Par défaut
    Je dis peut être une grosse bétisse, mais essaye ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    SELECT *
    FROM `tmp_dep1` INNER JOIN `tmp_dep2`ON `tmp_dep1`.`NOM_DDV` = `tmp_dep2`.`NOM_DDV`
    LIMIT 0 , 30

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Le problème c'est qu'il y a des éléments contenus dans la table de droite et qui ne sont pas dans la table de gauche et inversement, et j'aimerai qu'ils soient prises en compte.

  6. #6
    Membre confirmé Avatar de milia
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juillet 2006
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Juillet 2006
    Messages : 481
    Points : 532
    Points
    532
    Par défaut
    Je comprends pas très bien vu que je connais pas FULL OUTER JOIN.
    Etant donné que je suis curieuse, j'aimerais savoir ce que ça fait: FULL OUTER JOIN?

  7. #7
    Membre averti Avatar de jota5450
    Inscrit en
    Janvier 2006
    Messages
    263
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Janvier 2006
    Messages : 263
    Points : 332
    Points
    332
    Par défaut
    slt
    Eyant le meme peur que milia(+ 1 bettisse)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    (SELECT *
    FROM `tmp_dep1` left JOIN `tmp_dep2`ON `tmp_dep1`.`NOM_DDV` = `tmp_dep2`.`NOM_DDV`
    LIMIT 0 , 30)
    union
    (SELECT *
    FROM `tmp_dep1` right JOIN `tmp_dep2`ON `tmp_dep1`.`NOM_DDV` = `tmp_dep2`.`NOM_DDV`
    LIMIT 0 , 30 
    )

  8. #8
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut
    Citation Envoyé par SwiTz
    Y a t il un moyen d'arriver au même résultat qu'avec FULL OUTER JOIN, car elle correspondait vraiment à ce que je voulais
    Regarde mon deuxième lien

    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
    Up through Oracle8i, Oracle programmers have used a workaround to circumvent this limitation. The workaround involves two outer join queries combined by a UNION operator, as in the following example:
     
    SQL> select p.part_id, s.supplier_name
      2  from part p, supplier s
      3  where p.supplier_id = s.supplier_id (+)
      4  union
      5  select p.part_id, s.supplier_name
      6  from part p, supplier s
      7  where p.supplier_id (+) = s.supplier_id;
     
    PART SUPPLIER_NAME
    ---- --------------------
    P1   Supplier#1
    P2   Supplier#2
    P3
    P4
         Supplier#3

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    J'ai testé mais la requête ne fonctionne pas. J'ai même testé la suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select tmp_dep1.`DOM_VENTE`, tmp_dep2.`DOM_VENTE`
    from  tmp_dep1, tmp_dep2
    where  tmp_dep1.`DOM_VENTE` (+) = tmp_dep2.`DOM_VENTE`
    Voilà le message d'erreur

    MySQL a répondu:
    #1064 - Erreur de syntaxe près de '(+) = tmp_dep2.`DOM_VENTE` LIMIT 0, 30' à la ligne 3

  10. #10
    Membre éprouvé
    Avatar de Biglo
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 537
    Points : 984
    Points
    984
    Par défaut
    C'est la syntaxe Oracle avec les (+)

    Regarde ce qui est proposé par jota, avec RIGHT OUTER JOIN et LEFT OUTER JOIN.

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Oui cela m'a beaucoup aidé donc j'ai essayé de transformé ma requête suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select tmp_dep2.NUM_DDV, tmp_dep2.NOM_DDV, tmp_dep2.DOM_VENTE, tmp_dep1.CA_CUM, tmp_dep2.CA_CUM1, tmp_dep3.CA_AN
    from (tmp_dep2 left outer join tmp_dep1 on tmp_dep2.NOM_DDV = tmp_dep1.NOM_DDV and tmp_dep2.DOM_VENTE = tmp_dep1.DOM_VENTE) 
    left outer join tmp_dep3 on tmp_dep2.NOM_DDV = tmp_dep3.NOM_DDV and tmp_dep2.DOM_VENTE = tmp_dep3.DOM_VENTE

    Ce qui ma donner cela

    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
    (
    (SELECT tmp_dep2.NUM_DDV, tmp_dep2.NOM_DDV, tmp_dep2.DOM_VENTE, tmp_dep1.CA_CUM, tmp_dep2.CA_CUM1
    FROM tmp_dep1
    LEFT OUTER JOIN tmp_dep2 ON tmp_dep2.NOM_DDV = tmp_dep1.NOM_DDV
    AND tmp_dep2.DOM_VENTE = tmp_dep1.DOM_VENTE)
    union
    (SELECT tmp_dep2.NUM_DDV, tmp_dep2.NOM_DDV, tmp_dep2.DOM_VENTE, tmp_dep1.CA_CUM, tmp_dep2.CA_CUM1
    FROM tmp_dep1
    RIGHT OUTER JOIN tmp_dep2 ON tmp_dep2.NOM_DDV = tmp_dep1.NOM_DDV
    AND tmp_dep2.DOM_VENTE = tmp_dep1.DOM_VENTE)
    )
    union
    (
    (
    SELECT tmp_dep2.NUM_DDV, tmp_dep2.NOM_DDV, tmp_dep2.DOM_VENTE, tmp_dep2.CA_CUM1, tmp_dep3.CA_AN
    FROM tmp_dep2
    LEFT OUTER JOIN tmp_dep3 ON tmp_dep2.NOM_DDV = tmp_dep3.NOM_DDV
    AND tmp_dep2.DOM_VENTE = tmp_dep3.DOM_VENTE
    )
    UNION (
     
    SELECT tmp_dep2.NUM_DDV, tmp_dep2.NOM_DDV, tmp_dep2.DOM_VENTE, tmp_dep2.CA_CUM1, tmp_dep3.CA_AN
    FROM tmp_dep2
    RIGHT OUTER JOIN tmp_dep3 ON tmp_dep2.NOM_DDV = tmp_dep3.NOM_DDV
    AND tmp_dep2.DOM_VENTE = tmp_dep3.DOM_VENTE
    )
    )
    Mais hélas il y a une erreur de syntaxe, mais c'est dur de construire la requête :'(

  12. #12
    Membre éprouvé
    Avatar de Biglo
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 537
    Points : 984
    Points
    984
    Par défaut
    Quelle est l'erreur retournée ?

    Tu peux déjà simplifier : les parenthèses qui entourent les deux parties d'une clause UNION ne sont obligatoires que s'il y a un ORDER BY ou un LIMIT.

    Je pense aussi qu'il est possible de faire plusieurs jointures ensemble entre tes 3 tables, mais ça devient complexe pour moi

    Essaie ceci, mais je ne sais pas si ça sera le même résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT tmp_dep2.NUM_DDV, tmp_dep2.NOM_DDV, tmp_dep2.DOM_VENTE, tmp_dep1.CA_CUM, tmp_dep2.CA_CUM1
    FROM tmp_dep1
    LEFT OUTER JOIN tmp_dep2 ON tmp_dep2.NOM_DDV = tmp_dep1.NOM_DDV AND tmp_dep2.DOM_VENTE = tmp_dep1.DOM_VENTE
    LEFT OUTER JOIN tmp_dep3 ON tmp_dep2.NOM_DDV = tmp_dep3.NOM_DDV AND tmp_dep2.DOM_VENTE = tmp_dep3.DOM_VENTE
     
    UNION
     
    SELECT tmp_dep2.NUM_DDV, tmp_dep2.NOM_DDV, tmp_dep2.DOM_VENTE, tmp_dep1.CA_CUM, tmp_dep2.CA_CUM1
    FROM tmp_dep1
    RIGHT OUTER JOIN tmp_dep2 ON tmp_dep2.NOM_DDV = tmp_dep1.NOM_DDV AND tmp_dep2.DOM_VENTE = tmp_dep1.DOM_VENTE
    RIGHT OUTER JOIN tmp_dep3 ON tmp_dep2.NOM_DDV = tmp_dep3.NOM_DDV AND tmp_dep2.DOM_VENTE = tmp_dep3.DOM_VENTE

  13. #13
    Membre averti Avatar de jota5450
    Inscrit en
    Janvier 2006
    Messages
    263
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Janvier 2006
    Messages : 263
    Points : 332
    Points
    332
    Par défaut
    slt

    biglo, je crois que ta requete ne vas pas faire ce qu´il veut.

    essaye:

    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
     
     
    (
    SELECT t1.NUM_DDV, t1.NOM_DDV, t1.DOM_VENTE, t1.CA_CUM, t2.CA_CUM1
    FROM tmp_dep1 t1
    LEFT OUTER JOIN tmp_dep2 t2 ON t2.NOM_DDV = t1.NOM_DDV
    AND t2.DOM_VENTE = t1.DOM_VENTE
    )
    union
    (
    SELECT t2.NUM_DDV, t2.NOM_DDV, t2.DOM_VENTE, t1.CA_CUM, t2.CA_CUM1
    FROM tmp_dep1 t1
    RIGHT OUTER JOIN tmp_dep2 t2 ON t2.NOM_DDV = t1.NOM_DDV
    AND t2.DOM_VENTE = t1.DOM_VENTE
    )
    union
    (
    SELECT tm2.NUM_DDV, t2.NOM_DDV, t2.DOM_VENTE, t2.CA_CUM1, tmp_dep3.CA_AN
    FROM tmp_dep2 t2
    LEFT OUTER JOIN tmp_dep3 t3 ON t2.NOM_DDV = t3.NOM_DDV
    AND t2.DOM_VENTE = t3.DOM_VENTE
    )
    UNION 
    (
    SELECT t3.NUM_DDV, t3.NOM_DDV, t3.DOM_VENTE, tmp_dep2.CA_CUM1, tmp_dep3.CA_AN
    FROM tmp_dep2 t2
    RIGHT OUTER JOIN tmp_dep3 t3 ON t2.NOM_DDV = t3.NOM_DDV
    AND t2.DOM_VENTE = t3.DOM_VENTE
    )



    ca resoud peut etre pas ton probleme, mais le code reste plus lisible..


    les champs que tu met dans le select, t2.xxx ou t3.xxx, tu doit faire attention, si c´est des right join ou des left join.

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 91
    Points : 49
    Points
    49
    Par défaut
    Citation Envoyé par jota5450 Voir le message
    slt
    Eyant le meme peur que milia(+ 1 bettisse)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    (SELECT *
    FROM `tmp_dep1` left JOIN `tmp_dep2`ON `tmp_dep1`.`NOM_DDV` = `tmp_dep2`.`NOM_DDV`
    LIMIT 0 , 30)
    union
    (SELECT *
    FROM `tmp_dep1` right JOIN `tmp_dep2`ON `tmp_dep1`.`NOM_DDV` = `tmp_dep2`.`NOM_DDV`
    LIMIT 0 , 30 
    )
    J'avais le même problème que SwiTz Mais grâce à toi jota5450 j'ai réussi à surmonter ce problème. Merci à tous pour les contributions!

  15. #15
    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 040
    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 040
    Points : 23 795
    Points
    23 795
    Par défaut
    Puisque ce post est remonté, c'est l'occasion d'y ajouter le lien vers les sources MySQL, dont un exemple traite cette question.

    ced

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. L'équivalent de FULL OUTER JOIN sous ACCESS
    Par Le Pharaon dans le forum Langage SQL
    Réponses: 2
    Dernier message: 24/03/2013, 13h36
  2. Problème de FULL OUTER JOIN
    Par gibea00 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 01/05/2007, 18h12
  3. [Oracle 9] Probleme. FULL OUTER JOIN
    Par West01 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 17/10/2006, 08h46
  4. [ORACLE 9i] Equivalent du Full Outer Join
    Par Worldofdada dans le forum Oracle
    Réponses: 10
    Dernier message: 02/11/2005, 15h56
  5. Remplacer FULL OUTER JOIN
    Par funrighd dans le forum Requêtes
    Réponses: 2
    Dernier message: 17/07/2004, 11h54

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