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

MySQL Discussion :

Erreur syntaxique SQL


Sujet :

MySQL

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 27
    Par défaut Erreur syntaxique SQL
    Je souhaite corriger cette requete SQL ou il y a une erreur syntaxique

    Select * from pointage where id_tjm not in (select id_tjm from TJM T inner join Commande C on (T.id_tjm = C.id_tjm) INNER JOIN Facture F ON (F.id_cde = C.id_cde));

    Merci de votre aide

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

    Vous devriez communiquer votre message d'erreur !
    Cela dit, plusieurs remarques :
    • Ne JAMAIS faire de select *, c'est le plus souvent inutile, ça pénalise les perfs et le résultat de votre requête sera impacté si le DDL de la table évolue

    • Un minimum de présentation de la requête ne nuit pas, penez aux maintenances

    • Si les parenthèses sont inutiles et bien... ne les mettez pas

    • Pour un test d'existence, il faut utiliser une requête EXISTS plutôt qu'une requete IN(...)


    Voici une requête qui devrait vous satisfaire, et qui tient compte des remarques ci-dessus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Select col1, col2, ..., coln
    from pointage P
    where not exists
         (select id_tjm 
          from TJM T 
          inner join Commande C 
             on T.id_tjm = C.id_tjm
          INNER JOIN Facture F 
             ON F.id_cde = C.id_cde
          where T.id_tjm = P.id_tjm
         );

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 27
    Par défaut
    Bonjour,

    J'ai essayé avec votre requête mais je reçois le même message d'erreur :

    "Erreur de syntaxe dans l'expression <<not exists (select id_tjm from TJM T inner join Commande C on T.id_tjm = C.id_tjm INNER JOIN Facture F ON F.id_cde = C.id_cde where T.id_tjm = P.id_tjm);>>"

    au fait moi je souhaite supprimer les enregistrement dans pointage mais qui n'existe pas dans facture, mais je n'y arrive pas

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 681
    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 681
    Billets dans le blog
    10
    Par défaut
    J'avais oublié un alias, corrigez comme cici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    [...]where not exists
         (select T.id_tjm 
          from TJM T [...]
    Quel est votre SGBD ?

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 27
    Par défaut
    Re, je tiens tout d'abord à vous remercier de votre réactivité,

    J'ai corrigé avec la nouvelle modif mais j'ai toujours le même message d'erreur,

    Je travail sous access,

    Merci

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 681
    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 681
    Billets dans le blog
    10
    Par défaut
    Je ne vois pas d'erreur de syntaxe, peut être y a -t- il une erreur sur un nom de table ou un nom de colonne, vérifiez bien tous les noms (y compris les majuscules/minuscules, accents...)

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 27
    Par défaut
    J'ai relu la requête pas mal de fois, je l'ai réécris mais toujours le même message d'erreur:

    Nom : Capture.PNG
Affichages : 221
Taille : 21,9 Ko

  8. #8
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 681
    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 681
    Billets dans le blog
    10
    Par défaut
    Oups désolé, je n'avais pas vu la boulette, remplacez ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Select col1, col2, ..., coln
    from pointage P
    where not exists
         (select 1
          from TJM T 
          inner join Commande C 
             on T.id_tjm = C.id_tjm
          INNER JOIN Facture F 
             ON F.id_cde = C.id_cde
          where T.id_tjm = P.id_tjm
         );

  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 27
    Par défaut
    toujours la mm erreur, j'ai essayé la sous requête suivante

    select id_tjm from TJM T inner join Commande C on T.id_tjm = C.id_tjm INNER JOIN Facture F ON F.id_commande = C.id_cde;

    Et là aussi il y a l'erreur de syntaxe mais maintenant j ai une erreur de syntaxe: Absence d’opérateur
    Images attachées Images attachées  

  10. #10
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 681
    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 681
    Billets dans le blog
    10
    Par défaut
    C'est donc qu'il y avait bien des erreurs sur les noms de colonne, c'est étrange que ACCESS ne distingue pas une erreur de nom de colonne avec une erreur de syntaxe
    Il faut donc reprendre la requête du post de 13h56 mais avec ce correctif de nom (et d'autres si besoin, à vous de vérifier), ce qui donne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Select col1, col2, ..., coln
    from pointage P
    where not exists
         (select 1
          from TJM T 
          inner join Commande C 
             on T.id_tjm = C.id_tjm
          INNER JOIN Facture F 
             ON F.id_commande = C.id_cde
          where T.id_tjm = P.id_tjm
         );
    Pour éviter les allers-retours multiples, postez
    - votre requete complète
    - votre message d'erreur
    - votre DDL (ordres CREATE TABLE et INDEX)

  11. #11
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 27
    Par défaut
    je souhaite en fait supprimer les enregistrement d'une table "pointage" qui ne sont pas dans ma table "facture" pour se faire j'ai eu recours à la requête suivante :

    SQL = DELETE FROM pointage where ID_POINTAGE = " & Me.txt_id_pointage.Value & " AND TJM.[ID_TJM] = POINTAGE.[ID_TJM] AND TJM.[ID_CDE] = COMMANDE.[ID_CDE] AND COMMANDE.[ID_CDE] = FACTURE.[ID_COMMANDE] AND ID_COMMANDE NOT IN (SELECT ID_COMMANDE FROM FACTURE); Mais sous VBA ca me genere des boite de dialogue, et cela ne foncionne pas, d'où ma recherche de changer de requête, alors j'ai essayer avec un select d'abord :

    Select * from pointage where id_tjm not in (select id_tjm from TJM T inner join Commande C on (T.id_tjm = C.id_tjm) INNER JOIN Facture F ON (F.id_commande = C.id_cde));

    Et la j'ai la fameuse erreur de syntaxe :


    Pour le DDL j'ai pas compris,
    Images attachées Images attachées  

  12. #12
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 681
    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 681
    Billets dans le blog
    10
    Par défaut
    C'est probablement c'est partie là qui ne va pas

    Car il n'y a pas d'alias de table devant la colonne du coup si la colonne ID_COMMANDE existe dans plusieurs tables, ACCESS ne peut pas savoir à laquelle il doit s'adresser

    Est-ce ACCESS qui a remis une syntaxe not in ? si vous pouvez utiliser NOT EXISTS comme indiqué précédemment, c'est beaucoup mieux
    avez vous testé ma requête postée à 15h02 ?

    Le DDL c'est le Data Definition Language, c'est à dire le script qui permet de créer les tables, vues, index et autres objets de votre base de données.

  13. #13
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 27
    Par défaut
    oui, et j'ai recu le message suivant :
    Images attachées Images attachées  

  14. #14
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 681
    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 681
    Billets dans le blog
    10
    Par défaut
    Votre syntaxe n'est pas bonne "ID_TJM NOT EXISTS" vous devriez avoir WHERE not exists, reprenez exactement mon post de 15h02

  15. #15
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 27
    Par défaut
    Je crois que le problème réside dans la sous requête vu que même quand je l'ai essayé seule ça n'a pas marché

    Ci-joint le résultat suivant vos conseil, toujours la même erreur
    Images attachées Images attachées  

  16. #16
    Expert éminent
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 219
    Billets dans le blog
    16
    Par défaut
    Bonsoir,


    En fait ACCESS ignore (ou feint d'ignorer) que la jointure naturelle (inner equi-join) est associative, aussi exige-t-il que les inner joins soient emboîtés dans des niveaux de parenthèses propres à vous faire tourner en bourrique.

    Moralité : arrachez-vous les cheveux jusqu’à trouver les bonnes parenthèses, ou simplifiez-vous la vie et utilisez la technique pré-sql92 :


    
    SELECT col1, ...
    FROM pointage AS P
    WHERE not exists
         (select 1
          from TJM T, Commande C, Facture F 
          where T.id_tjm = P.id_tjm
          and   T.id_tjm = C.id_tjm
          and   F.id_cde = C.id_cde
         );
     
    

  17. #17
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 681
    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 681
    Billets dans le blog
    10
    Par défaut
    Peut être que MS-ACCESS n'accepte pas les jointures dans la sous-requête
    Pour en avoir le cœur net, supprimez ces jointures dans la sous-requete et testez, le résultat sera fonctionnellement faux bien sur, mais si ca passe, c'est que ça vient de là.

    Auquel cas se serait un bug spécifique à MS-ACCESS

    Edit : je viens de voir la réponse de FSMREL ! et bien c'est vraiment une spécificité surprenante d'access

  18. #18
    Expert éminent
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 219
    Billets dans le blog
    16
    Par défaut
    escartefigue,

    Nous avons répondu en même temps... En fait, les sous-requêtes peuvent contenir des jointures, mais emboîtées...

  19. #19
    Expert éminent
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 219
    Billets dans le blog
    16
    Par défaut
    Pour la petite histoire, voici ce que dit la documentation officielle :

    SELECT fields FROM table1 INNER JOIN (table2 INNER JOIN [( ]table3 [INNER JOIN [( ]tablex [INNER JOIN …)]  ON table3.field3 compopr tablex.fieldx)] ON table2.field2 compopr table3.field3)  ON table1.field1 compopr table2.field2;
    

  20. #20
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 681
    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 681
    Billets dans le blog
    10
    Par défaut
    Access reprend donc le précepte Shadock : pourquoi faire simple quand on peut faire compliqué

    Nom : shadock.png
Affichages : 159
Taille : 106,4 Ko

Discussions similaires

  1. Afficher le détail des erreurs syntaxiques
    Par Laurent Birckel dans le forum PostgreSQL
    Réponses: 7
    Dernier message: 22/03/2005, 18h44
  2. Réponses: 10
    Dernier message: 26/01/2005, 20h48
  3. [CE10 Pro] Erreur Connexion SQL pour etats publiés
    Par L.nico dans le forum Connectivité
    Réponses: 1
    Dernier message: 09/12/2004, 18h16
  4. catch des erreurs dans SQL+
    Par lalystar dans le forum Oracle
    Réponses: 2
    Dernier message: 21/09/2004, 16h17
  5. message d'erreur "Microsoft SQL-DMO"
    Par tachi dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 17/08/2004, 12h47

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