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

Requêtes et SQL. Discussion :

Une sous-requête avec NOT IN qui me cause du souci


Sujet :

Requêtes et SQL.

  1. #1
    Membre expert
    Avatar de annedeblois
    Femme Profil pro
    Analyste d'exploitation
    Inscrit en
    Août 2005
    Messages
    1 485
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 49
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Service public

    Informations forums :
    Inscription : Août 2005
    Messages : 1 485
    Points : 3 218
    Points
    3 218
    Par défaut Une sous-requête avec NOT IN qui me cause du souci
    Bonjour,

    Notre application maison dispose d'une fonction de facturation qui prend les enregistrements ajoutés à la table Queue_de_facturation et les insère dans une autre table FACTURES_VS_TRANSACTIONS afin de créer les factures pour impression et envoi aux clients.

    Je dois trouver, à partir du 1er janvier 2008, les enregistrements de la table Queue_de_facturation qui n'ont jamais été copiés dans la table FACTURES_VS_TRANSACTIONS. Pour cela, j'ai créé la requête suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT queue_de_facturation.Noechantillon, queue_de_facturation.NoTransaction, queue_de_facturation.DateSession, queue_de_facturation.NoSession
    FROM queue_de_facturation
    WHERE (((queue_de_facturation.NoTransaction) Not In (SELECT  DISTINCT NoTransaction FROM BIO_FACTURES_VS_TRANSACTIONS)) AND queue_de_facturation.DateSession > "2007-12-31");
    J'obtiens systématiquement des messages d'erreur d'espace insuffisant sur le disque temporaire. J'ai donc copié les deux tables dans une base de données Access séparée (temporaire) et ai tenté la même requête, rien à faire, voilà qu'au moment de taper ces lignes Access 2000 ne répond plus.

    Il y a sûrement quelque chose qui cloche dans cette requête, car pour l'année 2008 je ne cherche que dans 169 000 lignes, ce qui ne semble pas trop pour Access...

    Merci à l'avance,

    AD
    Anne, citoyenne canadienne
    Informaticienne, altiste et radioamateur... bref, originale
    Lire les règles...
    Un petit rappel: Je ne réponds à aucune question technique posée par MP

  2. #2
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut
    Bonjour,

    Mes premières questions vont te semblées idiotes, mais quel espace disque as-tu de libre et tes champs sont-ils indexés ?

    Désolé (Je me mets le carton rouge moi même )

    En même temps cela me fait penser à une dénormalisation...

    « Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
    - Confucius -

    Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
    Tous les cours Office
    Solutions d'Entreprise



  3. #3
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    A part que la date doit être entourer de #, la requete me semble correcte.

    Essai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    WHERE ((queue_de_facturation.NoTransaction Not In (SELECT  DISTINCT NoTransaction FROM BIO_FACTURES_VS_TRANSACTIONS)) AND (queue_de_facturation.DateSession > #2007-12-31#));
    Tu peux aussi faire la requête avec l'assistant d'Access.
    Amicalement

  4. #4
    Membre expert
    Avatar de annedeblois
    Femme Profil pro
    Analyste d'exploitation
    Inscrit en
    Août 2005
    Messages
    1 485
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 49
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Service public

    Informations forums :
    Inscription : Août 2005
    Messages : 1 485
    Points : 3 218
    Points
    3 218
    Par défaut
    Citation Envoyé par Chtulus Voir le message
    Bonjour,

    Mes premières questions vont te semblées idiotes, mais quel espace disque as-tu de libre et tes champs sont-ils indexés ?

    Désolé (Je me mets le carton rouge moi même )

    En même temps cela me fait penser à une dénormalisation...

    À moi aussi, alors... Au début, je roulais cette requête à même mon écran de bureau à distance, car l'appli est hébergée sur Windows 2003 Server avec Terminal Services. Le disque dur a plus de 12 Go de libres.

    Sur la copie «temporaire» que j'ai faite des deux tables, je n'ai pas indexé les champs et mon disque dur peine avec moins de 100 Mo libres... re-

    Mais les tables originales de l'appli sont bien indexées...

    Citation Envoyé par DMboup Voir le message
    A part que la date doit être entourer de #, la requete me semble correcte.

    Essai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    WHERE ((queue_de_facturation.NoTransaction Not In (SELECT  DISTINCT NoTransaction FROM BIO_FACTURES_VS_TRANSACTIONS)) AND (queue_de_facturation.DateSession > #2007-12-31#));
    Tu peux aussi faire la requête avec l'assistant d'Access.
    Merci, je vais essayer.
    Anne, citoyenne canadienne
    Informaticienne, altiste et radioamateur... bref, originale
    Lire les règles...
    Un petit rappel: Je ne réponds à aucune question technique posée par MP

  5. #5
    Membre expert
    Avatar de annedeblois
    Femme Profil pro
    Analyste d'exploitation
    Inscrit en
    Août 2005
    Messages
    1 485
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 49
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Service public

    Informations forums :
    Inscription : Août 2005
    Messages : 1 485
    Points : 3 218
    Points
    3 218
    Par défaut La solution consiste à faire autre chose que le NOT IN
    Bonjour,

    La seule façon pour moi de faire exécuter une requête fut d'enlever le NOT IN. Voici ce que j'ai codé à la place:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT Queue_de_Facturation.Noechantillon, Queue_de_Facturation.NoParam, Queue_de_Facturation.NoSession, Queue_de_Facturation.DateSession, Queue_de_Facturation.NoTransaction, bio_factures_vs_transactions.NoFacture
    FROM Queue_de_Facturation LEFT JOIN bio_factures_vs_transactions ON Queue_de_Facturation.NoTransaction = bio_factures_vs_transactions.NoTransaction
    WHERE (((Queue_de_Facturation.DateSession)>#12/31/2007#) AND ((bio_factures_vs_transactions.NoFacture) Is Null));
    Ça marche nickel et en plus ça m'a pris seulement 5 secondes!

    Je mérite donc un carton rouge pour ne pas avoir assez étudié les jointures durant mes cours de SQL à l'université...
    Anne, citoyenne canadienne
    Informaticienne, altiste et radioamateur... bref, originale
    Lire les règles...
    Un petit rappel: Je ne réponds à aucune question technique posée par MP

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

Discussions similaires

  1. sous-requête avec not null
    Par sky_perrinos dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 29/09/2014, 14h01
  2. [AC-2010] Requête avec NOT IN qui ne fonctionne pas
    Par happyaccess dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 24/03/2013, 23h53
  3. Réponses: 11
    Dernier message: 11/02/2013, 14h23
  4. Ordonner avec une sous requête ,possible ou pas?
    Par worm1 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 20/02/2007, 06h23
  5. Update avec une sous requête
    Par Deejoh dans le forum Installation
    Réponses: 7
    Dernier message: 25/01/2006, 11h50

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