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 avec requète SQL multi-tables pour recherche multi-critères


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Femme Profil pro
    Développement
    Inscrit en
    Février 2016
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développement
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2016
    Messages : 55
    Par défaut Problème avec requète SQL multi-tables pour recherche multi-critères
    Bonjour,

    Voici mes tables :

    • APPLICATION dans laquelle on trouve les champs Application_Id et Description_Anglaise
    • DESSINS dans laquelle on trouve les champs Dessin_Id et DESSIN
    • CLIENTS dans laquelle on trouve les champs Client_Id et CLIENT
    • TECHNOLOGIE dans laquelle on trouve les champs Technologie_Id et Description_Anglaise
    • BANQUE qui est la table qui relie tout. Il y a les champs suivant : Main_Id, Application_Id, Client_Id , Dessin_Id et Technologie_Id


    Maintenant voici ma requête:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    requete = "SELECT * FROM BANQUE AS banque, DESSINS AS dessin, APPLICATION AS application, CLIENTS As client, TECHNOLOGIE As technologie WHERE"
    If MainForm.cmbNomClient.Text <> "" Then requete = requete & " banque.Client_Id = client.Client_Id AND banque.Dessin_Id = dessin.Dessin_Id AND CLIENT LIKE '" & MainForm.cmbNomClient.Text & "'"
    If MainForm.cmbApplication.Text <> "" Then requete = requete & " AND banque.Application_Id = application.Application_Id AND banque.Dessin_Id = dessin.Dessin_Id AND application.Description_Anglaise LIKE '" & MainForm.cmbApplication.Text & "'"
    If MainForm.cmbAccessoires.Text <> "" Then requete = requete & " AND banque.Technologie_Id = technologie.Technology_Id AND banque.Dessin_Id = dessin.Dessin_Id AND technologie.Description_Anglaise LIKE  '" & MainForm.cmbTechnologie.Text & "'"
    La requête ne plante pas, mais je n'obtiens pas l'affichage désiré. En fait, si je demande d'afficher les dessin en fonction des clients, ceux-ci s'affichent en triple. Par exemple, au lieu d'avoir un seul dessin, j'ai trois fois le même qui s'affiche.
    J'ai tout essayé et j'aurais besoin d'un coup de main.

    Merci pour votre aide.

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 610
    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 610
    Billets dans le blog
    10
    Par défaut
    Bonsoir

    Vous faites des select * du coup vous avez à minima toutes vos colonnes de jointures en plusieurs exemplaires, et probablement plein de colonnes inutiles, commencez par coder en citant explicitement les colonnes requises, ca limitera les erreur, et rendra votre résultat stable quelque soient les évolutions de vos tables, sans compter le temps de traitement économisé à ne pas transporter des octets inutiles

    Postez vos requetes entre les balises code (icone # de la barre d'outils), ça facilitera la lecture

    Les champs c'est dans les formulaires, dans les tables se trouvent des colonnes

    Indiquez quels sont les index de vos tables, afin que les solution proposées soient viables

  3. #3
    Membre actif
    Femme Profil pro
    Développement
    Inscrit en
    Février 2016
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développement
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2016
    Messages : 55
    Par défaut
    Parfait c'est noté!
    Vous avez raison je voulais plutôt dire colonne et même attributs de mes tables...
    Je vais corriger le tout et faire un simple Select. Si ça ne fonctionne pas, je vous reviens!


    Merci beaucoup.

  4. #4
    Membre actif
    Femme Profil pro
    Développement
    Inscrit en
    Février 2016
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développement
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2016
    Messages : 55
    Par défaut
    Bonjour,

    serait-il possible de me donner une piste ? J'ai pas mal tout essayé et ça ne fonctionne toujours pas. Je présume que je dois utiliser des INNER JOIN. J'ai choisi d'utiliser le INNER JOIN, car je veux obtenir seulement mes données qui ont une correspondance entre mes tables. Pour la suite rient ne va plus. En fait, je ne sais pas ou mettre ma table BANQUE dans la requête suivante. Je suis vraiment perdue, j'ai peu d'expérience.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     requete = "SELECT  p.DESSIN DESSINS, j.CLIENT CLIENTS FROM CLIENTS j INNER JOIN DESSINS p ON p.Client_Id = j.Client_Id WHERE j.CLIENT LIKE & '" & MainForm.cmbNomClient.Text & "'"
    Je sais que ça ne fonctionne pas car je dois passer par BANQUE et que celle-ci n'est même pas évoquer dans ma requête...bref, je suis incapable de traduire la requête.

    Voilà ce que j'aimerais faire:

    J'aimerais obtenir les dessins de ma table dessins en fonction du client dans ma table client. Je rappelle que la table BANQUE relie tout. Après coup, je ne sais pas comment traduire la dernière requête que je vous aie envoyé.
    Raisonnement: Je dois passer par l'id client (Client_Id) de la table BANQUE et ensuite pointer sur l'attribut CLIENT de la table CLIENTS et ensuite je veux passer par l'Id dessin (Dessin_Id) de ma table BANQUE et ensuite pointer sur l'attribut DESSIN de ma table DESSINS et ma condition permet de trouver les données de ma tables DESSINS qui correspondent au client choisi par l'utilisateur, soit la valeur du combobox.

    Merci de me répondre.

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 610
    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 610
    Billets dans le blog
    10
    Par défaut
    Est-ce que ceci vous convient ? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT  DISTINCT 
            Dessin_Id
           ,Dessin
    FROM Dessin
    WHERE Dessin_Id in
         (SELECT Dessin_Id
          FROM banque
          WHERE Client_Id = client_saisi_par_utilisateur)

  6. #6
    Membre actif
    Femme Profil pro
    Développement
    Inscrit en
    Février 2016
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développement
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2016
    Messages : 55
    Par défaut
    Déjà vous m'avez donné un bon coup de pouce.

    La seule chose qui ne fonction pas c'est que l'idClient retourne un numéro d'id et nom pas le nom client donc j'obtiens cette erreur : "Data type mismatch in criteria expression". Mon objectif est d'accéder aux valeurs de la colonne CLIENT de la table CLIENTS.

    Ça revient un peu au problème que j'avais...je ne vois pas comment tout mettre en relation. La requête dit : je prends l'id dessin de ma table DESSIN ou le Dessin_Id dans ma TABLE CAPACITORBANK a un Id client qui correspond à ' unNomDeClient'.

    Toutefois, ce n'est pas l'Id qui correspond au nom de client, c'est la colonne CLIENT de la table CLIENTS. Bref, je ne sais pas comment organiser la requête et pointer sur l'attribut CLIENT de ma table CLIENTS. Comment faire plusieurs from dans la requête?

    J'ai essayé un truc comme ça mais évidemment ce ne doit pas être la bonne syntaxe:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            requete = "Select DISTINCT Dessin_Id ,DESSIN FROM DESSINS WHERE Dessin_Id in (SELECT Dessin_Id FROM BANQUE(SELECT Client_Id FROM CLIENTS WHERE CLIENT = '" & MainForm.cmbNomClient.Text & "'))"
    Merci de me répondre,

    Alex.

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

Discussions similaires

  1. [SQL] Problème avec requête SQL
    Par Kenya dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 28/01/2008, 22h13
  2. Problème avec requête SQL dans VBA
    Par Mimisio dans le forum VBA Access
    Réponses: 10
    Dernier message: 13/07/2007, 11h00
  3. [SQL] problème avec requête sql
    Par belakhdarbts10 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 14/05/2007, 11h58
  4. probléme avec requête SQL
    Par richard60 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 15/03/2007, 18h18
  5. Problème avec requête SQL avec variables
    Par harry25 dans le forum ASP
    Réponses: 1
    Dernier message: 03/01/2007, 03h41

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