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 :

[Teradata] Joindre une table avec contenu en wildcard


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2003
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2003
    Messages : 15
    Points : 13
    Points
    13
    Par défaut [Teradata] Joindre une table avec contenu en wildcard
    Bonjour à tous,

    Je ne trouve pas le moyen de joindre une table de valeur de référence qui contient des wildcard. Je m'explique:

    J'ai une table de lookup values (lov) :
    Code1 Code2 Categorie
    1 % ABC
    2 A DEF
    2 B GHI
    3 % JKL
    4 Z MNO
    4 Y PQR

    J'aimerai faire un join selon les valeurs avec wildcard ou non.

    Résultat attendu :
    Ligne avec Code1=1 & n'importe quelle valeur dans Code2 => ABC
    Ligne avec Code1=2 & Code2 = A => DEF
    etc..

    Sachant qu'il y a 2 possiblités :
    - Soit le code2 est un wildcard
    - Soit le code2 est ENTIEREMENT listé avec toutes les possibilités.

    Est-ce possible ?

    J'ai peur que non, car je ne vois pas comment écrire le joint, dès que je mets un wildcard, j'ai pour les lignes avec plusieurs code2, toutes les lignes pour une ligne en T1 (table principale)

    Merci d'avance

  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,
    Peux-tu nous donner un jeu d'essai et le résultat attendu ? Là on a le contenu de la table "lookup", mais pas celui de la table qui doit être jointe ni ce que doit être le résultat.
    Sinon de ce que j'ai compris:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select *
    from LaTable as t1
    inner join lookup on lookup.code1 = t1.colde1 and (lookup.code2 = t1.code2 or lookup.code2 = '%')

    Tatayo.

  3. #3
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Pour pouvoir t'aider à corriger ta requête, il faudrait que tu nous la montres
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  4. #4
    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 912
    Points
    38 912
    Billets dans le blog
    9
    Par défaut
    Je ne suis pas sur d'avoir bien compris, mais je pense que ça correspond à votre besoin :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    select t2.c1
         , T2.c2
         , t1.c3
    from tab2 t2
    inner join tab1 t1
       on t1.c1 = t2.c1
      and case when t2.c2='%'   then 1
               when t1.c2='%'   then 1
               when t1.c2=t2.c2 then 1
               else 0
          end =1

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2003
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2003
    Messages : 15
    Points : 13
    Points
    13
    Par défaut
    Déjà des réponses,wow merci

    Voici un exemple de la table lov :
    Code1 Code2 Categorie
    1003 % Cat1
    7000 % Cat1
    7001 % Cat2
    7002 35 Cat2
    7002 36 Cat1
    7003 % Cat1
    7004 % Cat2
    7008 % Cat1
    7009 % Cat3
    1004 90 Cat1
    1004 91 Cat2
    1004 92 Cat3

    La table principale contient un ID unique (t1) :
    ID Code1 Code2 ATTENDU
    1 7003 65 Cat1
    2 7003 64 Cat1
    3 7003 66 Cat1
    4 7003 65 Cat1
    5 7003 64 Cat1
    6 7003 66 Cat1
    7 7002 35 Cat2
    8 7002 36 Cat1
    9 1004 90 Cat1
    10 1004 90 Cat1
    11 1004 92 Cat3

    Si je prends ton SQL tatayo, j'obtiens plusieurs lignes pour une même ID dans la table principale

    Le résultat c'est pour un ID en t1 => Code1+Code2 = 1 Catégorie.

    Je n'ai pas de SQL à montrer car je cherche à construire un join entre t1 et lov et justement je ne sais pas comment le construire

    Voici le SQL de résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT
    	t1.id
    	,	lov.Categorie
    FROM t1
    LEFT JOIN lov
    	ON lov.Code1 = t1.Code1
    	AND love.Code2 = t1.code2 --

  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
    Est-ce que tu peux nous montrer la requête exacte que tu as lancée, et le résultat ?
    Je ne vois pas (avec les exemples fournis) dans quel cas elle renvoie plusieurs lignes.

    tatayo.

  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 912
    Points
    38 912
    Billets dans le blog
    9
    Par défaut
    avec ce jeu d'essais

    Code : 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
      with tab1 (c1, c2, c3) as
          (select 1, '%', 'ABC'   
           union all
           select 2, 'A', 'DEF'   
           union all
           select 2, 'B', 'GHI'   
           union all 
           select 3, '%', 'JKL'   
           union all
           select 4, 'Z', 'MNO'   
           union all
           select 4, 'Y', 'PQR'   
          )
         , tab2 (C1, C2) as
          (select 1, 'X'   
           union all
           select 2, '%'   
           union all
           select 3, '%'   
           union all
           select 4, 'A'   
           union all
           select 4, '%'   
           union all
           select 4, 'Y'   
          )
    et la requête que j'ai proposée plus haut, j'obtiens

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    1	X	ABC
    2	%	DEF
    2	%	GHI
    3	%	JKL
    4	%	PQR
    4	%	MNO
    4	Y	PQR
    qui me semble conforme à l'attendu... qui reste néanmoins pas très clair

  8. #8
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2003
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2003
    Messages : 15
    Points : 13
    Points
    13
    Par défaut
    Oui bon alors... On est vendredi et je suis fatigué

    Désolé pour la mauvaise explication..
    Donc avec le sql suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT
    	t1.f_id
    	,	lov.f_Cat
    FROM t1
    LEFT JOIN lov ON lov.f_Code1 = t1.f_Code1 AND (t1.f_Code2 = lov.f_code2 OR lov.f_code2 = '%')
    et les contenus suivants :
    t1:
    f_Id f_Code1 f_Code2
    9 1004 90
    5 7003 64
    8 7002 36
    2 7003 64
    11 1004 92
    6 7003 66
    4 7003 65
    1 7003 65
    3 7003 66
    10 1004 90
    7 7002 35
    lov:
    f_Code1 f_Code2 f_Cat
    1003 % Cat1
    7000 % Cat1
    7001 % Cat2
    7002 35 Cat2
    7002 36 Cat1
    7003 % Cat1
    7004 % Cat2
    7008 % Cat1
    7009 % Cat3
    1004 90 Cat1
    1004 91 Cat2
    1004 92 Cat3

    J'obtiens bien ce que j'attendais, à savoir :
    f_Id f_Cat
    6 Cat1
    7 Cat2
    9 Cat1
    4 Cat1
    8 Cat1
    10 Cat1
    2 Cat1
    11 Cat3
    1 Cat1
    5 Cat1
    3 Cat1


    Encore désolé pour la mauvaise explication... La solution était toute bête et j'étais trop loin dans la recherche du sql,,,

    Merci pour vos réponses

  9. #9
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Tant qu'à prendre le signe % comme identifiant générique, autant utiliser l'opérateur LIKE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LEFT JOIN lov ON lov.f_Code1 = t1.f_Code1 AND t1.f_Code2 LIKE lov.f_code2
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

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

Discussions similaires

  1. Comparer le contenu d'une table avec un fichier csv
    Par cdo22 dans le forum Requêtes
    Réponses: 3
    Dernier message: 21/11/2008, 18h35
  2. [AJAX] afficher le contenu d'une table avec ajax
    Par anouarsurvive dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 24/10/2008, 12h26
  3. afficher le contenu d'une table avec ajax
    Par anouarsurvive dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 24/10/2008, 11h11
  4. Réponses: 35
    Dernier message: 21/03/2007, 10h36
  5. modifier le contenu d'une table avec innerHTML
    Par francon81 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 31/05/2005, 09h02

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