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 :

Obtenir dans un UNION ou un JOIN le nom de la table source


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    chargé d'études statistiques et marketing
    Inscrit en
    Avril 2015
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : chargé d'études statistiques et marketing

    Informations forums :
    Inscription : Avril 2015
    Messages : 74
    Par défaut Obtenir dans un UNION ou un JOIN le nom de la table source
    bonjour

    je souhaiterais svp requêter 2 tables pour qu'elles me donnent uniquement les doublons qu'elles ont et le nom de la table d'où elles proviennent
    je ne sais pas si c'est union ou join , ni comment dans PL SQL - Obtenir dans un union le nom de la table source?


    en effet j'ai 2 tables (une "param" et une "child") qui stockent des noms de tables (table_name) et autres champs je souhaite voir les tables qui sont en commun et le nom de table (child/param) d'où elles proviennent

    table child :
    entity_code,
    type_process,
    schema_name,
    table_name,
    order_num,
    schema_name_child,
    table_name_child,
    join_txt,
    active


    table param :
    entity_code,
    type_process,
    order_num,
    schema_name,
    table_name,
    column_key,
    target_filter,
    param_filter,
    complex_filter,
    active

    merci !

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 778
    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 778
    Billets dans le blog
    10
    Par défaut
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    select 'param'
         , table_name
         , count(*)
    from param
    group by table_name
    having count(*) >1
    union all
    select 'child'
         , table_name
         , count(*)
    from child
    group by table_name
    having count(*) >1

  3. #3
    Membre confirmé
    Femme Profil pro
    chargé d'études statistiques et marketing
    Inscrit en
    Avril 2015
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : chargé d'études statistiques et marketing

    Informations forums :
    Inscription : Avril 2015
    Messages : 74
    Par défaut suite
    merci pour votre réponse rapide

    le champs de la table param est table_name et ce même champs s'appelle table_name_child ds la table child

    je ne vx pas le count l'ensemble des lignes et les champs : nom table source table_name, target filter, column key , table name child où table_name=table_name_child des 2 tables qui sont en doublon trié par table_name pour voir les infos de ces doublons (infos issus surtout de la param
    ex : param / " toto" / ..
    child / "toto" / ...

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 778
    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 778
    Billets dans le blog
    10
    Par défaut
    Ce serait plus simple en communiquant un exemple exact de contenu de chacune des deux tables (un extrait) et un exemple exact de résultat
    Pas avec des ... qui peuvent supposer tout et n'importe quoi, c'est sans doute clair dans votre esprit, mais mettez vous à la place des autres

    Précisez aussi quelles sont les colonnes clef primaire de chacune des tables, on en aura probablement besoin

    Précisez également si on peut avoir des doublons dans une même table : par exemple 3 fois la table 'T1' enregistrée dans la table child

  5. #5
    Membre confirmé
    Femme Profil pro
    chargé d'études statistiques et marketing
    Inscrit en
    Avril 2015
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : chargé d'études statistiques et marketing

    Informations forums :
    Inscription : Avril 2015
    Messages : 74
    Par défaut suite
    oui pardon, je m'exprime mal je démarre en sql

    oui on peut avoir des doublons ds la même table
    clé primaire si j'ai bien compris la déf d'une clé primaire serait table_name pr la param et table_name _child pr la 2nde

    j'ai réussi avec ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select  p.table_name, p.target_filter , p.column_key, c.table_name_child,c.type_process
     from table_param p
         full join table_child c
         on c.table_name_child = p.table_name ;
    merci pour vos retours :-)

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 778
    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 778
    Billets dans le blog
    10
    Par défaut
    Un full outer join sortira tous les éléments des deux tables qu'il y ait doublon ou pas, je ne vois pas comment ça pourrait convenir.

    Voici une solution possible, il y en a d'autres, qui tient compte du fait qu'on peut avoir plusieurs fois la même table dans "param" dans "child" ou une table présente dans les deux.

    Tout d'abord, création d'un jeu d'essai réduit (et simplifié, je n'ai conservé que quelques colonnes pour l'exemple) :

    Code SQL : 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
    create table PA_param
          (  PA_ident          integer   primary key
           , entity_code       char(4)   not null
           , order_num         integer   not null  
           , table_name        char(20)  not null 
          )       
    ;
    create table CH_child
          (  CH_ident          integer   primary key
           , entity_code       char(4)   not null
           , order_num         integer   not null
           , table_name_child  char(20)  not null
          )                    
    ;                          
    insert into PA_param (PA_ident, entity_code, order_num, table_name)
    values (0005, 'ET09', 123456, 'la table XX')
         , (0006, 'ET19', 123450, 'la table XX')  
         , (0007, 'ET00', 444444, 'la table T1')    
         , (0008, 'AXBX', 555555, 'autre table')
         , (0010, 'CXDX', 000022, 'table truc')
    ;
    insert into CH_child (CH_ident, entity_code, order_num, table_name_child)
    values (0001, 'ET09', 123456, 'la table XX')
         , (0002, 'ET12', 990055, 'la table YY')
         , (0004, 'ET05', 000022, 'autre table')
         , (0005, 'ET17', 123456, 'la table ZZ')
    ;


    Ensuite, j'utilise des CTE pour ajouter un identifiant unique à chaque ligne, que cette ligne provienne de la table "param" ou "child", ce qui me permet d'afficher les contenus différents qu'ils soient ou non dans la même table d'origine :


    Code SQL : 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
    30
    31
    32
    33
    34
    35
    36
    37
    -- création d'une CTE contenant toutes les lignes des deux tables 
    with T1(T1_source, entity_code, order_num, table_name) as
        (select 'param'
              , entity_code
              , order_num
              , table_name
         from PA_param
         union all
         select 'child'
              , entity_code
              , order_num
              , table_name_child
         from CH_child
         order by 1
        )
    -- création d'une autre CTE identique mais enrichie d'un identifiant 
       , T2(T2_rn, T2_source, entity_code, order_num, table_name) as
        (select row_number() over(order by table_name, T1_source)
              , T1_source
              , entity_code
              , order_num
              , table_name
         from T1
        )
    -- requête qui affiche les doublons et uniquement les doublons
    select TA.table_name     as TAB     
         , TA.T2_source      as S1
         , TA.entity_code    as E1
         , TA.order_num      as O1
         , TB.T2_source      as S1
         , TB.entity_code    as E1
         , TB.order_num      as O1
    from T2 as TA
    inner join T2 as TB
       on TB.table_name = TA.table_name
      and TB.T2_rn > TA.T2_rn
    ;


    Ce qui donne le résultat suivant (à enrichir avec toutes les colonnes qui vous intéressent) :

    Nom : Sans titre.png
Affichages : 278
Taille : 20,6 Ko

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

Discussions similaires

  1. Besoin de retrouner des 0 aussi dans une requête SQL avec JOIN
    Par Jean-Marc68 dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 05/11/2007, 14h45
  2. calcul dans les requêtes et left join
    Par jejeman dans le forum Requêtes
    Réponses: 5
    Dernier message: 13/07/2007, 15h34
  3. Identification provenance des données dans un UNION
    Par Arnard dans le forum Langage SQL
    Réponses: 2
    Dernier message: 31/05/2006, 15h22
  4. Obtenir le nom d'une table impliquée dans une contrainte
    Par graphicsxp dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 18/01/2006, 18h19
  5. problème de "collation" dans un UNION
    Par bilb0t dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 15/06/2004, 12h12

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