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 :

Demande d'aide pour écriture d'une requête Sql


Sujet :

Langage SQL

  1. #1
    Membre actif

    Inscrit en
    Mai 2010
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 401
    Points : 294
    Points
    294
    Par défaut Demande d'aide pour écriture d'une requête Sql
    Bonjour a tous,
    svp,
    j'ai une table nommé Table1 qui contient des articles ,et une autre table nommé Table2 qui contient aussi des articles.

    je souhaite écrire une requête Sql ,
    qui me donne tous les articles de table Table1 + tous les article Table 2 (qui ne figure pas dans la table 1)

    Nom : RequetteSpecial.png
Affichages : 145
Taille : 7,2 Ko


    voici mon essaye :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select distinct codeArt
    FROM Table1
    union all
    select distinct B.codeArt
    FROM Table1 A
    Right Join Table2 B ON A.codeArt = B.codeArt
    Where A.codeArt is null

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Si on n'a pas besoin de connaitre la provenance des articles, une simple union suffit, mais il ne faut pas utiliser UNION ALL, seulement UNION.

    Si on veut faire la part de ce qui vient de la table1, de la table2 ou qui est présent dans les deux, il faut utiliser une jointure FULL OUTER JOIN.

    Par exemple, avec ce jeu d'essais :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    with T1 (ART, DES) as
        (select 'ART1', 'article 1'   union all
         select 'ART2', 'article 2'   union all
         select 'ART4', 'article 4'
        )
       , T2 (ART, DES) as
        (select 'ART1', 'article 1'   union all
         select 'ART3', 'article 3'   union all
         select 'ART4', 'article 4'   union all
         select 'ART5', 'article 5'
        )


    UNION produit ce résultat :

    ART DES
    ART1 article 1
    ART2 article 2
    ART3 article 3
    ART4 article 4
    ART5 article 5


    Alors que FULL OUTER JOIN produit ce résultat :

    ART DES ART DES
    ART1 article 1 ART1 article 1
    null null ART3 article 3
    ART4 article 4 ART4 article 4
    null null ART5 article 5
    ART2 article 2 null null

  3. #3
    Membre actif

    Inscrit en
    Mai 2010
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 401
    Points : 294
    Points
    294
    Par défaut
    Merci beaucoup pour la réponse et pour le suivi.
    amicalement.

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 768
    Points : 52 719
    Points
    52 719
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par aimer_Delphi Voir le message
    ... tous les articles de table Table1 + tous les article Table 2 (qui ne figure pas dans la table 1)
    Plus simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    select *
    FROM Table1
    union*
    select *
    FROM Table2
    EXCEPT
    select *
    FROM Table1
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    @Frederic : ca ne donne pas le même résultat, et si c'est pour obtenir ce qui est dans T2 mais pas dans T1 (de ma compréhension, ce n'est pas ce qui est demandé), il est plus simple d'écrire

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select * 
    from T2
    except
    select * from T1

    en effet le premier select * from T1 de ta requête est annulé par le except select * from T1 qui suit

    Dans les deux cas on obtient :
    ART DES
    ART3 article 3
    ART5 article 5

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 768
    Points : 52 719
    Points
    52 719
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    ...
    Non car except est prioritaire devant UNION...

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  7. #7
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    je viens d'exécuter ta requete et la mienne sur sql server 2019 et j'obtiens exactement le même résultat
    Quoi qu'il en soit ce n'est pas le résultat attendu, puisqu'il faut T1 + le complément de T2, comme fourni dans ma 1re réponse

    Voir ICI

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

Discussions similaires

  1. Demande d'aide pour réalisation d'une requête SQL
    Par etiennegaloup dans le forum Langage SQL
    Réponses: 3
    Dernier message: 14/10/2013, 08h54
  2. [11g] Besoin d'aide pour écriture d'une requête
    Par telchargement dans le forum SQL
    Réponses: 3
    Dernier message: 19/04/2013, 11h05
  3. Aide pour Simplifier/optimiser une requête SQL
    Par bubu06 dans le forum Requêtes
    Réponses: 3
    Dernier message: 10/05/2012, 18h25
  4. aide sur écriture d'une requète
    Par awalter1 dans le forum SQL
    Réponses: 3
    Dernier message: 23/11/2010, 14h28
  5. Aide pour établissement d'une requête
    Par Virgile59 dans le forum Access
    Réponses: 2
    Dernier message: 28/02/2006, 18h55

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