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 :

Filtrer dans une table à partir de deux autres tables


Sujet :

Requêtes MySQL

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2013
    Messages : 11
    Points : 6
    Points
    6
    Par défaut Filtrer dans une table à partir de deux autres tables
    Bonjour a tous,

    Cela fait plusieurs jours que je m'arrache les cheveux sur un problème. je suis sur qu'il y a une solution simple mais impossible de la trouver...

    voila mon probleme

    J'ai trois table :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    container :
    id    content
    1    'aaa'
    2    'bbb'
    3    'ccc'
    4    'ddd'
    5    'eee'
    6    'fff'
    7    'ggg'
    8    'hhh'
    9    'iii'
    10   'jjj'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    tmp1 :
    id
    2
    3
    4
    5
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    tmp2 :
    id
    3
    4
    5
    6
    j'ai besoin de filtrer de deux façons dans dans la table container grace au tables tmp1 et tmp2 (sachant qu'il peut y en avoir plus) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT container.*
    FROM container
    INNER JOIN tmp1 ON tmp1.id = container.id
    INNER JOIN tmp2 ON tmp2.id = container.id
    ce qui me donne le résultat suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    array( [id=>3, content:'ccc'], [id=>4, content:'ddd'], [id=>5, content:'eee'] )
    maintenant j'ai besoin d'afficher ce résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    array( [id=>2, content:'bbb'], [id=>3, content:'ccc'], [id=>4, content:'ddd'], [id=>5, content:'eee'], [id=>6, content:'fff'] )

    j'ai trouvé ces deux solutions mais celles si sont bien trop gourmandes en ressource :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT container.*
    FROM container
    LEFT JOIN tmp1 ON tmp1.id = container.id
    LEFT JOIN tmp2 ON tmp2.id = container.id
    WHERE tmp1.id IS NOT NULL OR tmp2.id IS NOT NULL

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT container.*
    FROM container
    JOIN tmp298227 
    JOIN tmp193427
    WHERE container.i_autocode = tmp298227.i_containercode 
    OR container.i_autocode = tmp193427.i_containercode 
    GROUP BY container.i_autocode

    Quelqu'un aurait la bonté de me donner une solution miracle ?


    Mille mercis pour votre aide !!!

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Vous pouvez tenter ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT container.*
    FROM container
    INNER JOIN (
        SELECT id FROM tmp1 
        UNION 
        SELECT id FROM tmp2 
    ) tmp 
        ON tm.id = container.id
    Ou bien avec des EXISTS.

    Mais vos problèmes de performances viennent probablement d'index manquants.

    Quelle est la structure des tables, leur volumétrie, et quels sont les index disponibles ?

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2013
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    bonjour aieeeuuuuu,

    Merci pour votre réponse, cela marche parfaitement !

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 26/05/2014, 17h55
  2. Construire une table à partir de deux autres
    Par CaNiBaLe dans le forum Administration
    Réponses: 4
    Dernier message: 22/10/2013, 16h55
  3. UPDATE d'une Table à partir de deux autres Tables
    Par Marc_27 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 29/07/2009, 14h13
  4. Update d'une table à partir de deux autres tables
    Par Peewee766 dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 04/05/2008, 19h08
  5. Réponses: 11
    Dernier message: 26/02/2007, 00h04

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