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 :

Faire une Union de deux tables sans passer par UNION


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 152
    Points : 81
    Points
    81
    Par défaut Faire une Union de deux tables sans passer par UNION
    Bonjour,
    Je souhaite faire une union entre deux tables sans passer par l'instruction SQL UNION.

    Table1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    id      | nom           | prenom
    1       | DUPOND     | Jean
    2       | DARIN        | Camille
    Table2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    id      | nom           | prenom
    1       | JENE          | Philippe
    2       | DARIN        | Camille
    4       | JANIN        | JEAN-PIERE
    Résultat souhaité :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    id      | nom           | prenom
    1       | DUPOND     | Jean
    2       | DARIN        | Camille
    1       | JENE          | Philippe
    4       | JANIN        | JEAN-PIERE
    Je vous remercie par avance

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Pourquoi ?
    UNION (et pas UNION ALL) donne bien le résultat souhaité...
    Si c'est un problème lié aux id avec un exemple mal choisi tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select id, nom, prenom
      from table1
     union all
    select id, nom, prenom
      from table2 t2
     where not exists (select 1
                         from table1 t1
                        where t2.nom    = t1.nom
                          and t2.prenom = t1.prenom)

  3. #3
    Membre habitué Avatar de tfc3146
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Février 2009
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Février 2009
    Messages : 79
    Points : 150
    Points
    150
    Par défaut
    Bonsoir,

    Je ne connais pas de moyens de détourner le UNION (contrairement à INTERSECT et MINUS), mais je ne doute pas que cela soit possible.
    Mais pourquoi vouloir le détourner ? L'opérateur UNION n'est il pas supporté par tous les SGBD même MySQL ?
    C'est en faisant n'importe quoi qu'on devient n'importe qui
    Si un message vous a aidé, n'hésitez pas à mettre +1

  4. #4
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 152
    Points : 81
    Points
    81
    Par défaut
    Citation Envoyé par tfc3146 Voir le message
    Bonsoir,

    Je ne connais pas de moyens de détourner le UNION (contrairement à INTERSECT et MINUS), mais je ne doute pas que cela soit possible.
    Mais pourquoi vouloir le détourner ? L'opérateur UNION n'est il pas supporté par tous les SGBD même MySQL ?
    Bonjour et merci pour votre réponse.
    En fait, je voulais utiliser le UNION pour éviter des problèmes de perfs.
    En effet quand je fais un EXPLAIN sur ma requete ça me donne des chiffres fous.
    Par contre en utilisant UNION ALL j'ai moins de problèmes.
    Merci à tout le monde.

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 152
    Points : 81
    Points
    81
    Par défaut
    Citation Envoyé par skuatamad Voir le message
    Pourquoi ?
    UNION (et pas UNION ALL) donne bien le résultat souhaité...
    Si c'est un problème lié aux id avec un exemple mal choisi tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select id, nom, prenom
      from table1
     union all
    select id, nom, prenom
      from table2 t2
     where not exists (select 1
                         from table1 t1
                        where t2.nom    = t1.nom
                          and t2.prenom = t1.prenom)

    Merci c'est bien ça UNION ALL.
    Très gentil.

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

Discussions similaires

  1. [MySQL-5.6] Faire une requête sur deux tables pour avoir la valeur MAX sans le GROUP BY
    Par emykev22 dans le forum Requêtes
    Réponses: 1
    Dernier message: 04/06/2014, 12h12
  2. Réponses: 5
    Dernier message: 10/05/2008, 18h11
  3. [MySQL] Faire une jointure entre deux tables qui ne sont pas dans la même base de données
    Par sandddy dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 03/04/2008, 14h18
  4. Réponses: 7
    Dernier message: 28/03/2007, 13h57
  5. faire une différence entre deux tables
    Par geay dans le forum Langage SQL
    Réponses: 1
    Dernier message: 04/09/2006, 15h33

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