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 2 tables avec NOT EXISTS


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 71
    Points : 49
    Points
    49
    Par défaut Différence entre 2 tables avec NOT EXISTS
    Bonjour tout le monde ,
    j'ai une table ERP.GAC_COMPTE qui contient 94080 ligne .
    une table DATAWARHOUSE.dwh.GAC_COMPTE qui contient 93576 ligne .

    dans mon cas les 2 table doivent être identique (la table 2 doit avoir le même nombre de ligne que table 1 c.a.d 94080 )

    or il y a 504 ligne perdues .
    Pour identifié les lignes de la table 1 qui figurent pas dans la table 2 j'utilise cette requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from ERP.GAC_COMPTE where not exists (select * from DATAWARHOUSE.dwh.GAC_COMPTE
    ceci dit , cette requête me retourne 0 ligne comme si toute les ligne de table 1 sont présente dans table 2 .

    qui peut m'aider SVP et merci d'avance.

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 920
    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 920
    Points : 51 712
    Points
    51 712
    Billets dans le blog
    6
    Par défaut
    Sans corrélation de la sous requête, un NOT EXISTS ne sert en pratique à rien !

    Pour trouver les différences entre deux requêtes, vous pouvez utiliser le principe suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    WITH 
    TA AS (SELECT ...),
    TB AS (SELECT ...)
    SELECT * FROM TA
    EXCEPT 
    SELECT * FROM TB
    UNION ALL
    SELECT * FROM TB
    EXCEPT
    SELECT * FROM TA;
    Dans votre cas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    WITH 
    TA AS (select * from ERP.GAC_COMPTE),
    TB AS (select * from DATAWARHOUSE.dwh.GAC_COMPTE)
    SELECT * FROM TA
    EXCEPT 
    SELECT * FROM TB
    UNION ALL
    SELECT * FROM TB
    EXCEPT
    SELECT * FROM TA;
    Probablement des NULLs que vous n'avez pas su traiter correctement !

    A +

  3. #3
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 224
    Points : 19 566
    Points
    19 566
    Billets dans le blog
    25
    Par défaut
    Sans connaître votre moteur, c'est un peu dur...

    Lorsque les tables ont même structure, sous Oracle, j'utilise souvent le MINUS, le EXCEPT n'existant pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select * from table1
    minus
    select * from table2_ou_il_manque_des_lignes

  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 394
    Points
    18 394
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Pour trouver les différences entre deux requêtes, vous pouvez utiliser le principe suivant
    J'aime bien cette version qui fonctionne rapidement sur des gros volumes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    with cte_union as
    (
    select 1 as src, <liste de colonnes> from ERP.GAC_COMPTE
     union all
    select 2 as src, <liste de colonnes> from DATAWARHOUSE.dwh.GAC_COMPTE
    )
      select <liste de colonnes>, min(src)
        from cte_union
    group by <liste de colonnes>
      having count(*) = 1;

Discussions similaires

  1. Différence entre deux tables
    Par fabricedallara dans le forum SQL Procédural
    Réponses: 9
    Dernier message: 24/05/2012, 15h31
  2. Récuperer différence entre deux tables avec JOIN
    Par Takumi dans le forum Requêtes
    Réponses: 6
    Dernier message: 17/08/2009, 23h59
  3. provider 0x80040E37 table does not exist
    Par steph04 dans le forum ASP
    Réponses: 8
    Dernier message: 29/04/2005, 11h56
  4. [DB2] create table... if not exists ?
    Par iubito dans le forum DB2
    Réponses: 6
    Dernier message: 23/03/2004, 19h26
  5. Requète avec NOT EXISTS
    Par missllyss dans le forum SQL
    Réponses: 2
    Dernier message: 23/09/2003, 16h20

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