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

SQL Anywhere Sybase Discussion :

Jointures externes sous ASA


Sujet :

SQL Anywhere Sybase

  1. #1
    Futur Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 9
    Points : 5
    Points
    5
    Par défaut Jointures externes sous ASA
    Bonjour,

    Suite à une migration de version de SQL Anywhere(5->10) je dois réécrire certaines procédures stockées.

    J'ai notamment quelques problèmes sur les procédures qui utilisent des jointures externes.
    En effet celle ci avaient été écrites avec les symboles "*=" et "=*" qui ne sont plus acceptés dans la nouvelle version de ASA.

    Je trouve beaucoup de tutoriels qui expliquent comment faire des jointures externes avec la syntaxe normalisée des jointures mais c'est à chaque fois entre deux tables.

    Comment doit on écrire quand on a plusieurs tables?


    Exemple :
    Table1:Champ1,Champ2,Champ3
    Table2:Champ2
    Table3:Champ3,Champ4
    Table4:Champ4

    Solution?
    Select *
    From
    Table1 t1 LEFT OUTER JOIN Table2 t2
    ON t1.Champ2 = t2.Champ2,
    Table1 t1 LEFT OUTER JOIN Table3 t3
    ON t1.Champ3 = t3.Champ3,
    Table3 t3 LEFT OUTER JOIN Table4 t4
    ON t3.Champ4 = t4.Champ4
    [...]?

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 307
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 307
    Points : 1 828
    Points
    1 828
    Par défaut
    Si on veut passer de la syntax "Sybase" à la syntax ANSI, fait qqch comme cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    select ...
    from t1, t2, t3, t4
    where t1.id = t2.id
    and t1.id = t3.id
    and t4.toto = t3.toto
    and ... -- autres conditions
    devient

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    select ...
    from t1
    join t2 on t2.id = t1.id
    join t3 on t3.id = t1.id
    join t4 on t4.toto = t3.toto
    where ... -- autres conditions
    On ajoute "left outer" si la jointure est une jointure externe.

    Plus généralement je conseille fortement l'utilisation de la syntax ANSI - c'est nettement plus lisible lors de jointures un peu complexes...

    Michael
    Michael Peppler
    Membre de TeamSybase - www.teamsybase.com

    "A successful [software] tool is one that was used to do something undreamed of by its author." -- S. C. Johnson

  3. #3
    Futur Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par mpeppler Voir le message
    Si on veut passer de la syntax "Sybase" à la syntax ANSI, fait qqch comme cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    select ...
    from t1, t2, t3, t4
    where t1.id = t2.id
    and t1.id = t3.id
    and t4.toto = t3.toto
    and ... -- autres conditions
    devient

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    select ...
    from t1
    join t2 on t2.id = t1.id
    join t3 on t3.id = t1.id
    join t4 on t4.toto = t3.toto
    where ... -- autres conditions
    On ajoute "left outer" si la jointure est une jointure externe.

    Plus généralement je conseille fortement l'utilisation de la syntax ANSI - c'est nettement plus lisible lors de jointures un peu complexes...

    Michael
    C'est là où j'ai un peut de difficultés avec cette nouvelle syntaxe pour lire correctement ce qui a été codé.


    Dans un premier passage je lirais :
    -la table t1 que l'on joint à t2 avec la condition t2.id=t1.id
    -la table t1 que l'on joint à t3 avec la condition t3.id=t1.id
    -la table t1 que l'on joint à t4 avec la condition t4.toto=t3.toto


    Alors qu'après quelque minutes d'analyse de l'exemple j'en viens à cette lecture :
    - la table t1 n'a au début pas de condition de jointure particulière
    - on joint la table 2 à la table 1 avec la condition t2.id=t1.id
    - on joint la table 3 à la table 1 avec la condition t3.id=t1.id
    - on joint la table 4 à la table 3 avec la condition t4.toto=t3.toto



    Maintenant imaginons que nous ayons cet exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    select ...
    from t1
    join t2 on t2.id = t1.id
    join t3 on t3.id = t1.id
    left outer join t4 on t4.toto = t3.toto
    where ... -- autres conditions
    Comment le moteur analyse la jointure externe qu'il faut réaliser?
    Grâce à la position des champs dans la condition ON?
    Grâce à la table dont on veut faire la jointure?
    Si c'est un left outer join alors cela équivaut à t4.toto *= t3.toto?
    Si c'est un right outer join alors cela équivaut à t4.toto =* t3.toto?

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 59
    Points : 49
    Points
    49
    Par défaut
    Personnellement, je n'ai jamais utilisé l'ancienne syntaxe, donc je ne peux pas trop te dire l'équivalence. En revanche tu peux facilement savoir comment est analysée et traitée ta requête avec l'affichage du plan dans iSQL. Il te suffit de taper ta requête et de faire Shift+F5 (ou menu SQL et Accéder au plan).
    Très pratique pour optimiser les requêtes

Discussions similaires

  1. [2012] Jointure externe sous sqlserver
    Par Melvine dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 24/10/2014, 20h28
  2. Jointure externe sous condition
    Par amAtunisian dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 03/10/2013, 23h26
  3. Equivalent jointure externe (+) ORACLE sous ACCESS ?
    Par caboche dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 07/08/2007, 14h05
  4. sous requêtes et jointures externes
    Par Harpoon dans le forum Requêtes
    Réponses: 4
    Dernier message: 03/05/2007, 19h43
  5. [CR 8.5] Jointure Externe sous Crystal report
    Par alpachico dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 28/06/2005, 14h06

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