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 :

Syntaxe pour une jointure


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2002
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 33
    Points : 24
    Points
    24
    Par défaut Syntaxe pour une jointure
    Bonjour,

    j'ai une très belle requête sur une base Mysql qui contient une jointure externe gauche.
    Dans Toad, lorsque j'utilise la syntaxe "LEFT OUTER JOIN" ça marche très bien...
    mon problème est que je dois passer cette requête dans un ETL et que je n'ai pas la main sur la clause from... il faut que je me debrouille dans la clause "WHERE" et c'est la que ça se complique :
    je pensais pouvoir écrire quelque chose du style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE table1.id_valeur (+) = table2.id
    mais il semblerait que (+) ne soit pas accepté par Mysql... ou alors mon problème est ailleurs...
    quelqu'un pourrait me dire si l'utilisation du + est OK pour Mysql ?

  2. #2
    Membre régulier Avatar de jp_rennes
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mars 2006
    Messages : 72
    Points : 86
    Points
    86
    Par défaut l'utilisation du +
    WHERE (table1.id_valeur+0 = table2.id)

    exemple :
    une table client (avec id_client comme clé primaire, nom, prénom...etc...)
    une table emprunt (avec id_emprunt comme clé primaire , id_client comme clé étrangère(foreign key), ...etc)

    supposons que l'on fasse la requête
    select * from emprunt as e,client as c where (e.id_client=c.id_client);

    avec une tabl client de 100 000 lignes et une table emprunt de 500 000 lignes

    l'optimiseur a décidé de parcourir d'abord séquentiellement la table client puis pour chaque ligne utilise on utilise l'index de la clé étrangère pour retrouver les infos dans la table client. => résultat en 1 min 30

    Lors d'une requête avec jointure, l'optimiseur va décider quelle table il va parcourir en totalité et quel index il va utiliser pour rechercher les infos dans l'autre table.
    Mais il arrive que l'optimiseur se trompe dans ce choix. On peut forcer l'optimiseur à ne pas utiliser un index en rajoutant
    Le plus va indiquer à l'optimiseur de requête qu'il ne doit pas utiliser tel index
    select * from emprunt as e,client as c where (e.id_client+0=c.id_client);

    ici on oblige l'optimiseur donc à parcourir d'abord la table emprunt et pour chaque ligne utiliser l'index placant id_client de la table client => réponse en 8 sec

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

Discussions similaires

  1. problème de syntaxe pour une fonction
    Par gero123 dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 27/07/2007, 13h11
  2. besoin d'aide pour une jointure avec une exclusion
    Par manu_71 dans le forum Requêtes
    Réponses: 2
    Dernier message: 27/02/2007, 12h22
  3. Syntaxe pour une recherche sur 2 listes déroutantes
    Par christ-94 dans le forum Access
    Réponses: 2
    Dernier message: 24/05/2006, 18h51
  4. Réponses: 8
    Dernier message: 02/05/2006, 17h07
  5. [Oracle] : demande d'aide pour une jointure
    Par Gouzoul dans le forum Langage SQL
    Réponses: 10
    Dernier message: 27/04/2006, 12h39

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