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 :

Problème pour trouver les données commune dans une requête


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2007
    Messages : 12
    Points : 6
    Points
    6
    Par défaut Problème pour trouver les données commune dans une requête
    Bonjour à tous,

    Petite mise en situation qui explique le problème:
    Pour une requête je dois être capable de trouver tout les produits qui sont commun dans les factures d'un même client. Autrement dit, les produits retournés par la requête doivent se retrouver dans chacune des factures du client.

    J'aimerais vous écrire un bout de code que j'ai trouver pour le débugger avec vous mais franchement, je n'ai aucune idée de comment faire une telle requete

    Si quelqu'un peut m'aider ce serait très apprécier!

  2. #2
    Membre expérimenté Avatar de scheu
    Inscrit en
    Juin 2007
    Messages
    1 506
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 1 506
    Points : 1 734
    Points
    1 734
    Par défaut
    Sans le descriptif de tes tables, c'est pas gagné ...
    La théorie, c'est quand on sait tout mais que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne mais que personne ne sait pourquoi.
    Ici, nous avons réuni théorie et pratique : Rien ne fonctionne ... et personne ne sait pourquoi !

    Réplication de base avec Postgresql : http://scheu.developpez.com/tutoriel.../log-shipping/

  3. #3
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 2 576
    Points
    2 576
    Par défaut
    Il faut transcrire l'énoncé suivant :

    "Les produits pour lesquels je n'ai aucune facture du client pour lesquelles je n'ai pas le produit".

    C'est une requête à base de double négation qui est une solution pour effectuer ce qu'on appelle la division relationnelle (http://sqlpro.developpez.com/cours/divrelationnelle/)

    En prenant la structure suivante :

    T_Produit : {ID_produit, ...}
    T_Client : {ID_Client, ...}
    T_LigneFacture : {#ID_Facture, ID_LigneFacture, #ID_Produit, ...}
    T_Facture : {ID_Facture, #ID_Client}

    La requête devrait ressembler à ça à la fin :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT ID_Produit
    FROM T_Produit 
    WHERE NOT EXISTS (	SELECT 1 
    			FROM T_FACTURE 
    			WHERE ID_Client = TonIdClient
    			AND NOT EXISTS (	SELECT 1 
    						FROM T_LigneFacture
    						WHERE T_LigneFacture.Id_Facture = T_Facture.Id_Facture
    						AND T_LigneFacture.IdProduit = T_Produit.Id_produit
    					)
    		)

  4. #4
    Membre averti

    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 418
    Points : 328
    Points
    328
    Par défaut
    Effectivement, sans connaître les tables, difficile de te donner une réponse exacte.

    Cependant, il me semble qu'en reformulant le problème de la manière suivante : "quels sont, pour un client donné, les produits pour lesquels il n'existe pas de facture où ce produit n'apparaît pas", tu peux pratiquement le traduire tel quel en SQL.

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select distinct client, produit from ... V1
    where not exists 
      (select facture from  ... V2 
      where V1.client=V2.client and V2.produit not in 
        (select V3.produit from ... V3 where V2.facture=V3.facture)
      )
    Reste qu'à remplacer les V1/2/3 par les tables et jointures nécessaires

    J'ai refléchis rapidement, et je ne garantie pas que c'est la manière la plus performante de faire ta requête, mais a priori, ça devrait marcher.

    [edit]ha ben grillé...
    Je dois reconnaître, vmolines, que ta réponse est plus chiadée [/edit]

Discussions similaires

  1. Réponses: 1
    Dernier message: 26/07/2009, 02h21
  2. Problème pour lire les donnée d'une table externe
    Par waldoun dans le forum SQL*Loader
    Réponses: 0
    Dernier message: 01/05/2009, 19h16
  3. Problème pour lire les donnée d'une table externe
    Par mardoch dans le forum SQL*Loader
    Réponses: 6
    Dernier message: 17/07/2008, 17h41
  4. [MySQL] Problème pour insérer les données d'un fichier texte vers une table Mysql !
    Par BARRIAU76 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 01/02/2008, 00h24
  5. [Sécurité] Sécurité portable pour les données utilisées dans une requête
    Par berceker united dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 21/07/2006, 15h48

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