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

Développement de jobs Discussion :

A propos de la clause "Where NOT EXIST"


Sujet :

Développement de jobs

  1. #1
    Membre habitué
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2009
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2009
    Messages : 171
    Points : 172
    Points
    172
    Par défaut A propos de la clause "Where NOT EXIST"
    Slt a tous,

    Je dois traduire une requete par le biais de talend et je me pose la question de savoir si je me dirige dans la bonne direction .

    Grosso modo, ma requete :

    SELECT DISTINCT table1.champ1, table2.champ2, table3.champ3
    FROM table1
    INNER JOIN table2 ON (...)
    INNER JOIN table3 ON (...)
    INNER JOIN table4 ON (...)
    WHERE NOT EXIST (
    SELECT champ5 FROM table5 INNER JOIN table6 ON (...)
    WHERE ...
    )
    AND (...)
    )

    Visible sur le schéma :
    1 - Je fais mes jointures dans un tMap + les conditions dans le dernier AND (...) de ma requete
    2 - je fais la jointure des tables 5 et 6 dans un autre tMap
    3 - dans un troisième tMap, je fais une jointure interne entre mes 2 resultats obtenu a partir de mes 2 premier tMap
    4 - je dois récupérer les enregistrements qui NE sorte PAS du tMap numéro 3


    Plusieurs questions :
    - Mon raisonnement vous semble-t-il juste ?
    - Comment je peux l'améliorer ?

    et la question bonus :
    - Comment effectuer un DISTINCT sur une jointure a 4 tables ?

  2. #2
    Membre expérimenté Avatar de Benoit_Durand
    Profil pro
    Consultant en Business Intelligence Freelance
    Inscrit en
    Mars 2005
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence Freelance

    Informations forums :
    Inscription : Mars 2005
    Messages : 861
    Points : 1 308
    Points
    1 308
    Par défaut
    Question bonus : vous pouvez mettre un tUniqRow après les tMap.

    La volumétrie est importante ? (car ça risque de faire mal...)
    Sinon le raisonnement me parait correct.

    En cas de pb de performance il sera possible de sous traiter une partie du travail au sgbd.

    cdt,
    Pensez à la fonction Recherche

  3. #3
    Membre habitué
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2009
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2009
    Messages : 171
    Points : 172
    Points
    172
    Par défaut
    Merci pour la réponse.

    Exact pour le tUniqRow, je savais pas si on pouvais le faire directement dans le tMap ou non.

    Niveau volumétrie, entre 16000 et 150000 enregistrements par table .... mais au niveau des performances ca mets pas plus de 5 à 10 secondes quand je lance mon Job

  4. #4
    Membre expérimenté Avatar de Benoit_Durand
    Profil pro
    Consultant en Business Intelligence Freelance
    Inscrit en
    Mars 2005
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence Freelance

    Informations forums :
    Inscription : Mars 2005
    Messages : 861
    Points : 1 308
    Points
    1 308
    Par défaut
    Juste un truc :
    pour les clauses where, si elles sont du type maColonne='x', plutôt que de les mettre dans le tMap autant les mettre dans les tSGBDInputs pour retourner moins de lignes.
    Pensez à la fonction Recherche

  5. #5
    Membre habitué
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2009
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2009
    Messages : 171
    Points : 172
    Points
    172
    Par défaut
    Ok merci,

    pour le moment j'utilise des fichiers csv de tests donc j'essayerais ca le jour ou je dois me connecter à la base

  6. #6
    Membre éprouvé
    Homme Profil pro
    Architecte Décisionnel
    Inscrit en
    Février 2008
    Messages
    866
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte Décisionnel

    Informations forums :
    Inscription : Février 2008
    Messages : 866
    Points : 1 260
    Points
    1 260
    Par défaut
    Petite remarque : comme le signal Hebus_Beer, il peut-être plus performant de faire bosser la base de donnée.
    Et en dehors de certaines contraintes que tu as peut-être, ce serait bien plus facile pour toi de mettre direct ta requête dans le composant de lecture de la base de donnée ?

    Nicolas

  7. #7
    Membre habitué
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2009
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2009
    Messages : 171
    Points : 172
    Points
    172
    Par défaut
    Merci.

    Pour la solutions de mettre la requete directement en base, la ca risque d'être plus compliqué, je verrais si il y en a beoin ou pas le moment venu.

    Par contre, je me suis peut etre avancé un peu vite sur la dernière étape.
    En passant par un tMap, j'ai oublié que je ne peux pas récupéré les rejets (je fais juste une jointure interne entre mes table 5 et 6). Du coup je peux juste récupérer les enregistrements que je ne veux pas (qui correspondent a la clause "IN" et non "NOT IN").

    Quelqu'un aurait-il une solution ?

  8. #8
    Membre habitué
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2009
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2009
    Messages : 171
    Points : 172
    Points
    172
    Par défaut
    J'avais oublié la fonction pour récupérer les enregistrements non compris par l'inner join (La fleche violette).

    Merci pour vos réponses tout est ok !

    A+

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

Discussions similaires

  1. SQL SELECT WHERE NOT EXISTS
    Par talietotoro dans le forum Requêtes
    Réponses: 6
    Dernier message: 21/08/2023, 07h27
  2. Requete WHERE NOT EXIST
    Par lelectronique.com dans le forum Requêtes
    Réponses: 4
    Dernier message: 22/01/2012, 11h53
  3. Améliorer une requete where not exists
    Par first racing dans le forum Requêtes
    Réponses: 4
    Dernier message: 23/11/2010, 17h10
  4. Update Where not Exists
    Par wclef dans le forum Langage SQL
    Réponses: 4
    Dernier message: 09/03/2010, 10h50
  5. Insert .. where not exists
    Par Zolex dans le forum SQL Procédural
    Réponses: 11
    Dernier message: 02/03/2007, 11h26

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