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

PostgreSQL Discussion :

le comportement des alias de table est différent dans postgres que dans mysql !


Sujet :

PostgreSQL

  1. #1
    Membre éclairé
    Avatar de clavier12AZQSWX
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2009
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 414
    Points : 871
    Points
    871
    Par défaut le comportement des alias de table est différent dans postgres que dans mysql !
    bonjour,

    ce message n'est pas une question mais comme je viens de le découvrir, autant en faire profiter les gens.

    Dans postgres, quand on fait cela :
    SELECT * FROM matable toto
    WHERE matable.monchamp='rouge'

    le résultat inclut les lignes où champ est différent de rouge (ce qui me stupéfait)
    car.........
    quand j'ai crée l'alias toto (sans pour autant l'utiliser dans le WHERE) et j'ai utilisé le vrai nom de la table (avec le point), l'ancien nom de la table 'matable' n'existe plus et postgres créer donc une autre table, donc un produit cartésien.
    donc c'est l'équivalent de cette réquête :

    SELECT * FROM matable t1, matable t2
    WHERE t1.monchamp='rouge'

    lorsqu'on fait pareil dans Mysql, mysql nous bloque bien :

    requête SQL: Documentation

    SELECT uti_id, uti_identite
    FROM utilisateurs u
    WHERE utilisateurs.uti_identite LIKE '%og%'
    LIMIT 0 , 100

    MySQL a réponduocumentation
    #1109 - Table inconnue 'utilisateurs' dans where clause
    ce que j'ai appris :
    un alias de table créer vraiment une autre table, ce n'est pas juste un 'lien symbolique' d'une table, ou juste un autre nom.
    donc ça a un coût mémoire...

  2. #2
    Membre éclairé
    Avatar de clavier12AZQSWX
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2009
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 414
    Points : 871
    Points
    871
    Par défaut
    et comme le dit la doc, le comportement est très décrié :

    dd_missing_from (boolean)

    Lorsque ce paramètre est activé (on), les tables référencées par une requête sont automatiquement ajoutées à la clause FROM, si elles n'y sont pas déjà présentes. Ce comportement, incompatible avec le standard SQL, est très décrié car il masque les erreurs (comme de faire référence à une table à la place de son alias). Désactivé par défaut (off), ce paramètre peut être activé pour des raisons de compatibilité avec les versions antérieures à PostgreSQL™ 8.1, pour lesquelles ce comportement était activé par défaut.

    Même lorsque cette variable est activée, un message d'avertissement est émis pour chaque entrée FROM implicite référencée par une requête. Les utilisateurs sont encouragés à mettre à jour leurs applications pour qu'elles ne s'appuient pas sur ce comportement. Il suffit pour cela d'ajouter toutes les tables référencées par une requête dans la clause FROM de cette requête (ou dans sa clause USING dans le cas d'un DELETE).

Discussions similaires

  1. Réponses: 7
    Dernier message: 16/06/2017, 13h39
  2. Réponses: 7
    Dernier message: 19/03/2012, 09h27
  3. Réponses: 7
    Dernier message: 09/09/2011, 11h21
  4. gestion des alias de table
    Par PAYASS59 dans le forum PL/SQL
    Réponses: 14
    Dernier message: 03/03/2011, 15h31
  5. Copy from avec plus de champs dans csv que dans la table
    Par Débéa dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 20/10/2009, 08h07

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