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 :

Chercher la non présence d'une donnée


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 123
    Par défaut Chercher la non présence d'une donnée
    Bonjour,

    Je vous explique mon problème :
    J'ai une table contenant plusieurs dizaine de milliers de lignes qui est composé comme ceci :
    NUMERO
    ======
    num_1
    num_2
    num_3
    num_4
    Pour l'instant rien de bien compliqué...puis j'ai un ensemble de nombre, par exemple

    num_1
    num_2
    num_4
    J'aimerai avoir une requete qui me retourne les numéros qui ne sont pas dans ma liste, par exemple pour ici : num_3...

    J'ai essayé de généré un fichier sql pour chaque numéro de ma liste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select distinct 'ok' from pgw_customer where EXTERNAL_ID NOT IN('324322')
    mais c'est beaucoup beaucoup trop lent!!

    Merci d'avance pour vos réponses!

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Par défaut
    Bonjour,
    J'ai nommé la table avec plusieurs milliers de ligne grosse_table et la table contenant la liste des numéro liste_numero.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT DISTINCT numero FROM grosse_table G
    left outer join liste_numero L on L.numero=G.numero
    where L.numero is null;
    En revanche cela sera lent si tu n'as pas d'index sur numero dans grosse_table.
    A+
    Soazig

  3. #3
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 123
    Par défaut
    Citation Envoyé par soazig Voir le message
    Bonjour,
    J'ai nommé la table avec plusieurs milliers de ligne grosse_table et la table contenant la liste des numéro liste_numero.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT DISTINCT numero FROM grosse_table G
    left outer join liste_numero L on L.numero=G.numero
    where L.numero is null;
    En revanche cela sera lent si tu n'as pas d'index sur numero dans grosse_table.
    A+
    Soazig
    Ah..excuse moi, j'ai oublié de préciser que ma deuxième liste n'était pas une table mais une variable, chaque numéro est une variable Shell...Par exemple si on reprends ma première requête, ça donnerait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DISTINCT 'ok' FROM pgw_customer WHERE EXTERNAL_ID NOT IN('${varaible_ksh}')
    Merci

  4. #4
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Par défaut
    tu ne peux pas mettre toute ta liste dans un seul 'NOT IN' ?

  5. #5
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 123
    Par défaut
    c'est une liste de 150 000 numéros en principe...et ça pourrait monter à 600 000...
    c'est un peu beaucoup, nan ?

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Par défaut
    Bonjour,
    A mon avis la solution avec une table éventuellement temporaire contenant la liste des numéros est la plus simple.
    Quand je dis temporaire, rien ne t'empêche de créer une vrai table au début du traitement, de la remplir par boucle dans ton shell et de la dropper après le select que je t'ai proposé.
    En créant éventuellement le temps du traitement un index sur numero dans grosse table.

    PS : A part si j'ai mal compris avec ta requête exemple tu ne peux avoir que les numéros de ta liste de numéros qui sont dans grosse_table, (tu récupère OK s'il ne sont pas dans grosse table). Or je pensais que tu voulais les numéros de grosse tables qui ne sont pas dans ta liste, et c'est ce que fait ma requête.

    a+
    Soazig

Discussions similaires

  1. Réponses: 4
    Dernier message: 04/09/2010, 16h32
  2. Réponses: 10
    Dernier message: 27/08/2010, 12h04
  3. [MySQL] Vérification de la non présence d'une valeur
    Par popy67 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 05/04/2009, 15h12
  4. [MySQL] Vérification de la présence d'une donnée déficiente
    Par sanaa16 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 08/06/2008, 02h17
  5. [XSLT] Tester la non présence d'une valeur dans un fichier
    Par arnauann dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 23/01/2007, 16h29

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