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 :

Inclusion d'un ensemble dans un autre ou réutilisation d'une requète imbriquée


Sujet :

Requêtes MySQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 5
    Points : 6
    Points
    6
    Par défaut Inclusion d'un ensemble dans un autre ou réutilisation d'une requète imbriquée
    Bonjour,

    J'ai un petit soucis sur une requète qui s'exexute sur un serveur MySQL (derniere version ou pas loin).

    J'aimerais faire quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT ....
    FROM ....
    WHERE (1,2,3,4....) IN (SELECT -requete imbriquée-...)
    La requete imbriquée est nécessaire car une de ses clause WHERE porte sur un id recupéré de la requète principale.
    Malheureusement le (1,2,3,4) IN ne fonctionne pas.

    Pour l'instant je peux seulement faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT ....
    FROM ....
    WHERE 1 IN (SELECT ...)
    AND 2 IN (SELECT ...)
    AND 3 IN (SELECT ...)
    AND 4 IN (SELECT ...)
    Cela fonctionne, mais évidemment niveau perf ça doit vraiment pas être terrible (je vais essayer de faire des tests sur une base de données un peu gonflée, pour voir...).

    J'ais bien tenté un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT ....
    FROM ....
    WHERE 1 IN (SELECT ...) as REQ
    AND 2 IN REQ
    AND 3 IN REQ
    AND 4 IN REQ
    Mais ça ne fonctionne pas

    Y t-il une solution à mon problème ? (réutilisation de la requete imbriquée sans la rééxécuter, manipulation sur les ensembles)

    MySQL étant plutot pauvre au niveau des optérations sur les ensembles, il semble que je ne puisse pas faire une "division" (un NOT IN suivis d'un MINUS me semble t-il)

    Je vais peut être devoir passer à PostgreSQL.

    Merci d'avance pour votre aide.

  2. #2
    Membre éclairé Avatar de pop_up
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    877
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 877
    Points : 786
    Points
    786
    Par défaut
    Tu peux essayer de transformer tes clauses avec des ça ira plus vite

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Merci pour ta réponse.

    Non je pense que je ne peux pas faire cela. A moins que je ne me trompe, LEFT JOIN va faire une jointure de deux tables, donc le "JOIN ON (MA REQUETE IMBRIQUE)" ne va effectuer qu'une seule fois ma sous requète pour toute la requète (étant donné qu'elle sera considérée comme une table) . Or elle doit être calculée pour chaque "ligne" évaluée (sous requète correlative il me semble).
    J'explique un peu. La requète globale parcours des entreprise, et ma sous requete renvois un résultat calculé propre a chaque entreprise. Ce résultat renvois une liste d'identifiants, et j'ai un autre ensemble (fixe et connu a l'avance) qui doit être inclu dans le premier. Par exemple, 4;7;8;9 doivent être dans le résultat de la sous requete qui concerne chaque entreprise.

    Je pense donc que cela ne peut pas fonctionner avec ton idée.

    Et même si ceci pouvait fonctionner (mais je ne crois pas que cela me donne le résultat obtenu avec le IN) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    LEFT JOIN 4 ON (SELECT .... -ma requète imbriquée-)
    LEFT JOIN 7 ON (SELECT .... -ma requète imbriquée-)
    LEFT JOIN 8 ON (SELECT .... -ma requète imbriquée-)
    ...
    on aurait toujours ma sous requète, qui est LA MEME, éxécutée plusieurs fois pour chaque évaluation d'une ligne (entreprise).
    Donc il y aurait peut etre un gain sur le JOIN comparé au IN, mais bon

    Mon problèeme est de réaliser ceci :
    (un ensemble d'identifiants : 1,4,6,7,) ALL IN (un autre ensemble, calculé par une sous requete)

    Evidemment ALL IN ne fonctionne pas, mais cest pour bien expliquer ce que j'attends.

    Pour l'instant j'en suis à faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT ....
    FROM ....
    WHERE 1 IN (SELECT ...)
    AND 2 IN (SELECT ... SOUS REQUETE)
    AND 3 IN (SELECT ... SOUS REQUETE)
    AND 4 IN (SELECT ... SOUS REQUETE)
    qui m'effectue la sous requete autant de fois que j'ai d'identifiants dans le premier ensemble (alors que la sous requete est bien sur la meme), ce qui est évidemment mauvais pour les performances.

    J'espere que j'ai bien réussi à m'explqiuer

    Merci d'avance pour votre aide.

Discussions similaires

  1. inclusion d'un polygone dans un autre plus grand
    Par Invité dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 01/08/2012, 00h05
  2. [PHP 5.3] Inclusion d'un code dans un autre
    Par leirisset dans le forum Langage
    Réponses: 0
    Dernier message: 26/12/2010, 19h38
  3. [PHP 5.0] appel d'une variable global dans un autre fichier à partir d'une classe
    Par andry.aime dans le forum Langage
    Réponses: 1
    Dernier message: 13/01/2009, 09h31
  4. Inclusion d'un properties dans un autre
    Par burhud dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 02/06/2008, 10h01
  5. [XSD] Inclusion d'un schéma dans un autre
    Par ploxien dans le forum Valider
    Réponses: 1
    Dernier message: 20/09/2006, 18h24

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