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 :

Différence entre deux tables


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 168
    Points : 52
    Points
    52
    Par défaut Différence entre deux tables
    Bonjour à tous

    J'ai deux tables :
    1. Tab1 (id, name) qui comporte 167 enregistrements et
    2. Tab2 (id, name) identique à Tab1 mais qui comporte 169 enregistrements


    Les name dans la table Tab2 sont au nombre de 167 et ressemblent à ceux de Tab1.

    Comment je peux faire sortir les deux name supplémentaires dans Tab2 ?
    J'ai essayé avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select name from Tab2
    MINUS
    select name from Tab1
    Merci.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Tu n'étais pas loin:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT name FROM Tab2
    except
    SELECT name FROM Tab1

    Tatayo.

  3. #3
    Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 168
    Points : 52
    Points
    52
    Par défaut
    Je te remercie

    J'ai ajouté des conditions mais cela n'a pas marché

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select name from Tab1 where name like '%Manager%'
    except
    select name from Tab2 where name like '%Level2%'
    sachant que la condition where porte sur le name

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Tu n'as pas la même condition dans les deux requêtes, est-ce normal ?
    D'après ta requête tu veux tous les nom de TAB1 contenant "Manager" SAUF ceux qui sont aussi dans TAB2 et qui contiennent "Level2"...
    Est-ce que tu peux nous donner un petit jeu de test avec le résultat attendu ?

    Tatayo.

  5. #5
    Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 168
    Points : 52
    Points
    52
    Par défaut
    Par exemple

    Tab1

    id Name
    14 AAAManager
    15 BBBManager
    16 CCCManager


    Tab 2

    id Name

    58 AAAManager
    96 BBBManager


    Je voudrais écrire une requête qui me permet d'afficher l'enregistrement (16, CCCManager) de Tab1

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    C'est bien ce que je disais, la clause where dans la deuxième requête n'était pas bonne...
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT name FROM Tab1 WHERE name LIKE '%Manager%'
    except
    SELECT name FROM Tab2 WHERE name LIKE '%Manager%'
    Maintenant si tu veux aussi l'ID, il faut faire autrement:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select id,name
    from tab1
    left outer join tab2 on tab1.name = tab2.name
    where tab2.id is null and tab1.name like '%Manager%'
    Tu peux aussi utiliser NOT IN, NOT EXISTS... j'avoue que je ne sais pas lequel est le plus performant.

    tatayo.

  7. #7
    Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 168
    Points : 52
    Points
    52
    Par défaut
    Je pense que j'ai compliqué la question. En effet il n'y a pas vraiment de 2 tables mais une seule. Je te donne un exemple de quelques enregistrements

    Table

    id name
    1 Proj1_Manager
    2 Proj1_Level2
    3 Proj2_Manager
    4 Proj2_Level2
    5 Proj3_Manager


    Ma première question n'a pas vraiment de sens. Ce que je voudrais afficher la 5eme ligne de la table.

    Petite explication :
    Pour chaque projet il y a 2 types de sous projet : Manager et Level2 sauf le dernier qui n'a pas un sous projet de type Level2

  8. #8
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Ou comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select *
      from Tab1
     where name in (SELECT name
                      FROM Tab1
                     WHERE name LIKE '%Manager%'
                    except
                    SELECT name
                      FROM Tab2
                     WHERE name LIKE '%Manager%')
    Ou encore changer le IN en jointure.


    Edit : évidemment avec le besoin expliqué, ça n'a plus de sens.

  9. #9
    Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 168
    Points : 52
    Points
    52
    Par défaut
    Merci Waldar pour ta réponse.

    Il y a une seule table comme je l'ai écrit dans le message juste en dessus du tien, je vais quand même essayer avec ta proposition

  10. #10
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Non, essayez plutôt celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      select min(id) as id, min(name) as name
        from MaTable
    group by substring(name, 1, 5)
      having count(*) = 1

  11. #11
    Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 168
    Points : 52
    Points
    52
    Par défaut
    pourquoi le min(id) ? les id sont aléatoires

  12. #12
    Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 168
    Points : 52
    Points
    52
    Par défaut
    Remarque, la table contient 167 enregistrements je peux donc chercher à la main mais ce n'est pas pratique.

    le but est d'afficher tous les projets qui n'ont pas Level2

  13. #13
    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 : 60
    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 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par wissem.ba Voir le message
    le but est d'afficher tous les projets qui n'ont pas Level2
    Cette fois le besoin est plus clair !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT t1.id
    FROM la_table t1
    LEFT OUTER JOIN la_table t2 
        ON SUBSTRING(t2.name FROM 1 TO 5) = SUBSTRING(t1.name FROM 1 TO 5)
        AND t2.name LIKE '%Level2%'
    WHERE t1.name LIKE '%Manager%'
        AND t2.id IS NULL
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

Discussions similaires

  1. Différence entre deux tables
    Par fabricedallara dans le forum SQL Procédural
    Réponses: 9
    Dernier message: 24/05/2012, 14h31
  2. MINUS et Différence entre deux tables
    Par thegreatbato dans le forum SQL
    Réponses: 19
    Dernier message: 27/03/2008, 17h16
  3. Afficher la différence entre deux tables
    Par MartinezGarcia dans le forum Langage SQL
    Réponses: 5
    Dernier message: 18/02/2008, 20h25
  4. Différence entre deux tables
    Par szoubir dans le forum Développement de jobs
    Réponses: 2
    Dernier message: 24/07/2007, 18h41
  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