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 :

Problème Projet SQL


Sujet :

Requêtes et SQL.

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2012
    Messages
    335
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2012
    Messages : 335
    Par défaut Problème Projet SQL
    Bonjour,
    On m'a récemment donné une base de donnée en me demandant d'écrire quelques requêtes en Sql sous Access. J'ai donc écrit les deux premières:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    SELECT E.RaisonSociale, E.Alias, E.Effectif, E.NomDiri, E.PrenomDiri, E.Commune, E.Tel, D.LibDomaine
    FROM Entreprise AS E, SpecEnt AS SE, Domaine AS D
    WHERE (E.RaisonSociale LIKE "Normatique")
    AND (E.CP LIKE "F 14")
    AND E.SIRET=SE.SIRET
    AND D.NoDomaine=SE.NoDomaine;
     
    SELECT E.SIRET, E.RaisonSociale, E.NomDiri, E.PrenomDiri, E.Tel
    FROM Entreprise AS E, SpecEnt AS SE, Domaine AS D
    WHERE E.CP="F 50100"
    AND E.SIRET=SE.SIRET
    AND SE.NoDomaine=D.NoDomaine
    AND D.LibDomaine="sous-traitance"
    ORDER BY 2, 3;
    Mais le problème c'est que quand je les éxecute, il m'affiche un tableau avec les différents tutres mais vide!

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    1) Les jointures s'écrivent depuis 20 ans avec l'opérateur JOIN ; il serait temps de s'y mettre !

    Ceci dit, Access a une manière tellement tarabiscotée d'écrire les jointures multiples que ce n'est pas sûr qu'une requête correctement écrite en SQL standard puisse fonctionner sous Access. À moins que Petitmou ait amélioré ça dans les dernières versions d'Access depuis que j'ai quitté sa planète ?

    2) Utiliser LIKE sans caractère générique revient à utiliser =

    3) En SQL, les valeurs textuelles s'entourent d'apostrophes, pas de guillemets !

    Voici vos deux requêtes correctement récrites en SQL standard :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT E.RaisonSociale, E.Alias, E.Effectif, E.NomDiri, E.PrenomDiri, E.Commune, E.Tel, D.LibDomaine
    FROM Entreprise AS E
    INNER JOIN SpecEnt AS SE ON E.SIRET = SE.SIRET
    	INNER JOIN Domaine AS D ON D.NoDomaine = SE.NoDomaine
    WHERE E.RaisonSociale = 'Normatique'
    	AND E.CP = 'F 14';
     
    SELECT E.SIRET, E.RaisonSociale, E.NomDiri, E.PrenomDiri, E.Tel
    FROM Entreprise AS E
    INNER JOIN SpecEnt AS SE ON E.SIRET = SE.SIRET
    	INNER JOIN Domaine AS D ON D.NoDomaine = SE.NoDomaine
    WHERE E.CP = 'F 50100'
    ORDER BY E.RaisonSociale, E.NomDiri;
    Si elles ne donnent toujours pas de résultat, commencez par faire une requête sur la table Entreprise puis ajoutez la restriction puis ajoutez une jointure puis la seconde. Vous verrez bien à quel moment ça coince.

    Autre remarque :
    Si le SIRET est la clé primaire d'une table, comme le laisse supposer la condition de jointure, c'est une mauvaise clé.
    Idem pour NoDomaine si c'est une chaîne alphanumérique.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2012
    Messages
    335
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2012
    Messages : 335
    Par défaut J'ai réessayé comme vous dites mais ça ne marche toujours pas
    J'ai essayé de créer deux requêtes et de coller vos instructions dedans mais j'obtiens le même résultat, j'ai donc essayé de supprimer ligne après ligne:
    1)le select from tout seul marche parfaitement
    2)sans les jointure et avec la restriction, il m'affiche le même tableau vide
    3)quand je mets tout il refuse même de s'exécuter en me disant qu'il manque un opérateur dans la première jointure
    par ailleurs, je n'ai jamais entendu parler de INNER JOIN … ON

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par aertys Voir le message
    1)le select from tout seul marche parfaitement
    Donc ceci fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT E.RaisonSociale, E.Alias, E.Effectif, E.NomDiri, E.PrenomDiri, E.Commune, E.Tel
    FROM Entreprise AS E
    C'est bien la moindre des choses puisqu'on se contente d'extraire toutes les lignes d'une table sans restriction.

    2)sans les jointure et avec la restriction, il m'affiche le même tableau vide
    C'est à dire que ceci ne fonctionne pas ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT E.RaisonSociale, E.Alias, E.Effectif, E.NomDiri, E.PrenomDiri, E.Commune, E.Tel
    FROM Entreprise AS E
    WHERE E.RaisonSociale = 'Normatique'
    3)quand je mets tout il refuse même de s'exécuter en me disant qu'il manque un opérateur dans la première jointure
    par ailleurs, je n'ai jamais entendu parler de INNER JOIN … ON
    Ben j'ai donné le lien vers le cours de SQLPro dans mon précédent message. C'est juste comme ça qu'on doit écrire les jointures depuis 20 ans !

    Le problème avec Access, s'il n'a pas changé, c'est qu'il imbrique les jointures quand il y en a plusieurs et qu'il ajoute une forêt de parenthèses inutiles.

    Si vous n'y arrivez pas en mode SQL, créez les requêtes en mode graphique et regardez le SQL produit par Access ensuite. Ça fait un peu peur mais bon...
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2012
    Messages
    335
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2012
    Messages : 335
    Par défaut J'ai écris une nouvelle requête qui ne fonctionne pas
    Ma première requête ne marche toujours pas, je demanderais pourquoi à mon prof; mais il s'est révélée en étudiant la base que l'erreur de la seconde n'était que de la syntaxe, donc j'ai tapé la troisième, mais, à nouveau, j'ai un tableau vide:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT DISTINCT E.SIRET, E.RaisonSociale, E.TitreDiri, E.NomDiri, E.PrenomDiri, D.LibDomaine, COUNT(SE.Evaluation) AS Nombreevaluations
    FROM ENTREPRISE AS E, SPECENT AS SE, DOMAINE AS D
    WHERE E.CP LIKE "F 50"
    AND E.SIRET=SE.SIRET
    AND SE.NoDomaine=D.NoDomaine
    GROUP BY E.SIRET, E.RaisonSociale, E.TitreDiri, E.NomDiri, E.PrenomDiri, D.LibDomaine
    ORDER BY 2, 3;
    J'ai tout de même essayé de retirer les jointures:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT DISTINCT E.SIRET, E.RaisonSociale, E.TitreDiri, E.NomDiri, E.PrenomDiri, D.LibDomaine, COUNT(SE.Evaluation) AS Nombreevaluations
    FROM ENTREPRISE AS E, SPECENT AS SE, DOMAINE AS D
    WHERE E.CP LIKE "F 50"
    Mais j'obtiens l'erreur suivante:
    Vous avez essayé d’exécuter une requête ne comprenant pas l’expression spécifiée «*RaisonSociale*» comme une partie de la fonction d’agrégat.

  6. #6
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Par défaut
    Salut CinePhil et bienvenu aertys,

    aertys tu n'as pas un brin de compassion pour CinePhil? ^^
    il t'a dit que tes requêtes lui faisait mal au yeux.
    même si c'est pas le pb, et qu'elles marchent pas, mets lui au moins une requête avec une jointure.
    Ca me fait de la peine pour lui ^^

    il a raison le sql access est un peu différent, voici donc de quoi t'inspirer:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT DISTINCT E.SIRET, E.RaisonSociale, E.TitreDiri, E.NomDiri, E.PrenomDiri, D.LibDomaine, COUNT(SE.Evaluation) AS Nombreevaluations
    FROM ENTREPRISE AS E
       INNER JOIN (SPECENT AS SE
          INNER JOIN DOMAINE AS D ON SE.NoDomaine=D.NoDomaine)
       ON E.SIRET=SE.SIRET
    WHERE True
    GROUP BY E.SIRET, E.RaisonSociale, E.TitreDiri, E.NomDiri, E.PrenomDiri, D.LibDomaine
    ORDER BY E.RaisonSociale, E.TitreDiri;
    Cela dit si n'y a pas d'erreur et qu'il n'y a pas de réponse, c'est peut être aussi ca la réponse...
    avec ces conditions (ou ceux que tu as) si une des jointures est manquante il n'y aura pas de réponse: c'est principalement une erreur de donnée.

Discussions similaires

  1. Problème requete SQL
    Par tonyskn dans le forum Langage SQL
    Réponses: 3
    Dernier message: 14/11/2004, 20h37
  2. problème requete sql
    Par Fred- dans le forum ASP
    Réponses: 2
    Dernier message: 13/06/2004, 02h20
  3. Problème réplication SQL Server et SQL Server CE (RDA)
    Par didix11 dans le forum Réplications
    Réponses: 2
    Dernier message: 15/04/2004, 11h10
  4. Problème Requete SQL et QuickReport
    Par arnaud_verlaine dans le forum C++Builder
    Réponses: 7
    Dernier message: 07/01/2004, 09h31
  5. Réponses: 8
    Dernier message: 23/10/2003, 16h22

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