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 MySQL Discussion :

Left join : plus pareil suivant la version de mysql


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Left join : plus pareil suivant la version de mysql
    Les dernières versions 5 plantent avec ça: (colonne valise_somme.noclient inconnue) :
    (grosse requetes pour avoir les ventes de clients accolées au listing client, qu'il y ait vente ou pas)

    select v.noclient,cl.remise,cl.convention,cl.nom,cl.nodepot,r.nom as rnom,cl.representant,v.collection,s.libelle,v.qt,sum(c.qt*c.contenance),sum(c.ca),sum(c.pr)
    from stock s,clients cl,valise_somme v,representants r
    left join cacumul c
    on (c.noclient=v.noclient and c.collection=v.collection and c.mois>=200410 and c.mois<=200605)
    where s.codep=v.collection and v.noclient=cl.noclient and r.numero=cl.representant and v.collection=999932
    group by v.noclient,v.collection
    Les "anciennes" l'accepte.
    Si j'intervertis valise_somme,representants , ça fonctionne:

    select v.noclient,cl.remise,cl.convention,cl.nom,cl.nodepot,r.nom as rnom,cl.representant,v.collection,s.libelle,v.qt,sum(c.qt*c.contenance),sum(c.ca),sum(c.pr)
    from stock s,clients cl,,representants r,valise_somme v
    left join cacumul c
    on (c.noclient=v.noclient and c.collection=v.collection and c.mois>=200410 and c.mois<=200605)
    where s.codep=v.collection and v.noclient=cl.noclient and r.numero=cl.representant and v.collection=999932
    group by v.noclient,v.collection
    [Note pour SqlPro : je suis sur que j'ai enfreint beaucoup de règles du Sql et que ce code doit être atroce, mais c'est un post juste pour signaler ce changement de comportement qui peut être perturbant pour pas mal de dilettantes du sql comme moi ]

  2. #2
    Membre Expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Par défaut
    ?????

    Je teste cela ce soir !

    Je déplace vers le forum MySQL. (Et en plus comme cela Maximilian lira ce truc fou ! )
    Alexandre Tranchant
    Chef de projet AMO pour le Cerema.
    Retrouvez mes articles sur PHP et Symfony

  3. #3
    Membre Expert Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Par défaut
    ( Hello Florian, ça faisait un bail )

    Ca peut paraitre fou en effet mais le comportement est bien décrit dans la doc, ça vient du fait que la priorité entre "JOIN" et "," a changé en 5.0

    Previously, the comma operator (,) and JOIN both had the same precedence, so the join expression t1, t2 JOIN t3 was interpreted as ((t1, t2) JOIN t3). Now JOIN has higher precedence, so the expression is interpreted as (t1, (t2 JOIN t3)). This change affects statements that use an ON clause, because that clause can refer only to columns in the operands of the join, and the change in precedence changes interpretation of what those operands are.

    Example:

    CREATE TABLE t1 (i1 INT, j1 INT);
    CREATE TABLE t2 (i2 INT, j2 INT);
    CREATE TABLE t3 (i3 INT, j3 INT);
    INSERT INTO t1 VALUES(1,1);
    INSERT INTO t2 VALUES(1,1);
    INSERT INTO t3 VALUES(1,1);
    SELECT * FROM t1, t2 JOIN t3 ON (t1.i1 = t3.i3);

    Previously, the SELECT was legal due to the implicit grouping of t1,t2 as (t1,t2). Now the JOIN takes precedence, so the operands for the ON clause are t2 and t3. Because t1.i1 is not a column in either of the operands, the result is an Unknown column 't1.i1' in 'on clause' error. To allow the join to be processed, group the first two tables explicitly with parentheses so that the operands for the ON clause are (t1,t2) and t3:

    SELECT * FROM (t1, t2) JOIN t3 ON (t1.i1 = t3.i3);

    Alternatively, avoid the use of the comma operator and use JOIN instead:

    SELECT * FROM t1 JOIN t2 JOIN t3 ON (t1.i1 = t3.i3);
    Il vaut donc mieux utiliser JOIN que la syntaxe à virgule dans les nouvelles versions.

  4. #4
    Membre Expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Par défaut
    Je crois que cela va partir dans la FAQ ! Nous aurons souvent la question
    Alexandre Tranchant
    Chef de projet AMO pour le Cerema.
    Retrouvez mes articles sur PHP et Symfony

  5. #5
    Membre Expert Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Par défaut
    Ajouté à la todo FAQ

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

Discussions similaires

  1. Problème sur un left join en version 4 mais pas en 5 !
    Par Christophe Charron dans le forum Requêtes
    Réponses: 1
    Dernier message: 04/05/2007, 20h45
  2. Réponses: 3
    Dernier message: 13/11/2006, 17h06
  3. Interbase et left join
    Par Zog dans le forum Bases de données
    Réponses: 4
    Dernier message: 23/03/2004, 08h55
  4. Non coincident MySQL (Left Join)
    Par Remiguel dans le forum Requêtes
    Réponses: 6
    Dernier message: 03/11/2003, 21h25
  5. Export d'une vue avec LEFT JOIN
    Par schnourf dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 22/05/2003, 13h57

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