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

Langage SQL Discussion :

[MySQL] Re-utilisation d'une table avec des alias


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Septembre 2008
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 49
    Par défaut [MySQL] Re-utilisation d'une table avec des alias
    Bonjour. Je vous expose mon petit problème actuel :
    J'ai deux tables, une représentant des tickets avec diverses informations dessus, l'autre représentant des lignes de tickets avec diverses informations dessus. La jointure pour ces deux tables se fait grâce au champ ID_ticket.

    Par la suite je vais effectuer beaucoup d'opérations sur ces deux tables, du genre une dizaine de requêtes qui peuvent être séparées, mais le soucis vient du fait que je dois effectuer tout ça en une seule requête.

    Mon problème vient du fait que je souhaite mettre des conditions par rapport aux deux tables, par exemple effectuer les opérations dont je parle dans le deuxième paragraphe uniquement sur une période donnée (il suffit pour cela de poser une condition sur un champ de la table ticket).

    Voici de façon grossière un exemple de ce que je veux à quoi ma requête ressemble :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT sous_requette_1.information1, sous_requette_2.information1, sous_requette_2.information2
    FROM ticket, ligne_ticket
    WHERE ticket.ID_ticket = ligne_ticket.ID_ticket
    AND ticket.mois_ticket = 9
    JOIN (SELECT COUNT(ticket.ID_ticket) AS information1
            FROM ???
            WHERE ticket.champ42 = 1) AS sous_requete_1
    JOIN (SELECT COUNT(ticket.ID_ticket) AS information1, SUM(ligne_ticket.prix) AS information 2
            FROM ???
            WHERE ticket.champ42 = 0)AS sous_requete_2
    Enfin voilà les sous requêtes ne représentent pas vraiment ce que je veux faire mais c'est juste pour vous montrer l'idée... Le problème vient du fait que je ne sais pas quoi mettre dans le FROM des "sous requêtes". Le soucis aurait pu être réglé avec une VIEW, mais je dois effectuer tout ça en une seule requête.

    Pour récapituler je sélectionne des lignes de deux tables, et avec tout ça je fais des "sous requêtes" qui sont traité comme des alias...

    Merci d'avance.

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 952
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 952
    Par défaut
    Salut,
    La requête exemple que tu proposes ne ressemble pas à grand chose donc pas facile de savoir ce que tu veux faire.
    Cependant, si tes sous requêtes ne sont que des agrégations sans group by (donc une ligne par sous-requête) tu peux te permettre d'écrire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT sous_requette_1.information1, sous_requette_2.information1, sous_requette_2.information2
    FROM (SELECT COUNT(ticket.ID_ticket) AS information1
            FROM ticket
            JOIN ligne_ticket ON ticket.ID_ticket = ligne_ticket.ID_ticket
            WHERE ticket.mois_ticket = 9
            AND ticket.champ42 = 1) AS sous_requete_1,
         (SELECT COUNT(ticket.ID_ticket) AS information1, SUM(ligne_ticket.prix) AS information 2
            FROM ticket
            JOIN ligne_ticket ON ticket.ID_ticket = ligne_ticket.ID_ticket
            WHERE ticket.mois_ticket = 9
            AND ticket.champ42 = 0) AS sous_requete_2
    Par contre si les sous-requêtes ne varient que sur un critère à prendre en compte ou pas tu peux utiliser case comme astuce et éviter les sous-requêtes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT sum(case when ticket.champ42=1 then 1 else 0 end) as nb_ticket_1,
           sum(case when ticket.champ42=0 then 1 else 0 end) as nb_ticket_0,
           SUM(case when ticket.champ42=0 then ligne_ticket.prix else 0 end) as sum_prix_0
    FROM ticket
    JOIN ligne_ticket ON ticket.ID_ticket = ligne_ticket.ID_ticket
    WHERE ticket.mois_ticket = 9
    Mais bon je suis peut-être complètement à côté de la plaque

Discussions similaires

  1. une Table avec des cellules fusionnées
    Par vodasan dans le forum Windows Forms
    Réponses: 3
    Dernier message: 10/03/2008, 08h24
  2. Réponses: 4
    Dernier message: 22/11/2007, 19h23
  3. réorganiser une table avec des variables dynamiques
    Par Stefan_H dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/11/2007, 12h40
  4. remplir une table avec des données aléatoire
    Par jamal_id dans le forum SQL
    Réponses: 3
    Dernier message: 17/10/2007, 10h11
  5. [D7],[ADO] : ordonner une table avec des champs référencés
    Par iam dans le forum Bases de données
    Réponses: 3
    Dernier message: 07/11/2006, 21h36

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