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 :

Faire un SELECT sur 2 tables?


Sujet :

Requêtes MySQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8
    Points : 6
    Points
    6
    Par défaut Faire un SELECT sur 2 tables?
    Est-ce possible de transposer ces 2 requêtes en une seule?

    Par example :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    #Requête A
    SELECT *, SUM(col) AS total1
     FROM table1
     INNER JOIN table3
     ON table1.cp = table3.ce
     WHERE id = var
     GROUP BY id
     
    #Requête B
    SELECT *, SUM(col) AS total2
     FROM table2
     INNER JOIN table3
     ON table2.cp = table3.ce
     WHERE id = var
     GROUP BY id
    Car je veux la somme de total1 + total2 AS total avec un ORDER BY total.


    Merci.

  2. #2
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut
    Salut,

    J'ai l'impression que tu as un problème de modélisation, table1 et table2 ont l'air identiques.

    Néanmoins à partir de MySQL 4.0 tu peux parenthéser les 2 requêtes, les joindre avec une UNION et ajouter un ORDER BY.
    Pensez au bouton

  3. #3
    Membre éprouvé
    Avatar de Sivrît
    Profil pro
    Inscrit en
    Février 2006
    Messages
    953
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2006
    Messages : 953
    Points : 1 249
    Points
    1 249
    Par défaut
    D'abord 'WHERE id = var' et 'GROUP BY id' sont incompatibles. Soit on prend un 'id' et il est inutile de grouper (ce qui sera bien plkus rapide), soit on groupe pour avoir la liste complète et il ne faut pas filtrer.

    Je vois plusieurs solutions mais, à moins que table1 et table2 soient en fait la même table, je pense que ce sera impossible sans requêtes imbriquées (donc mysql récent de rigueur). Je suppose plus ou moins que 'id' est dans stable3.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    SELECT id, SUM(col) AS total
    FROM
       (
        (SELECT id, col1 as col
         FROM table1
         INNER JOIN table3
         ON table1.cp = table3.ce)
        UNION ALL
        (SELECT id, col2
         FROM table2
         INNER JOIN table3
         ON table2.cp = table3.ce)
       ) AS reunion
    GROUP BY id
    ORDER total
    Ca marche aussi en utilisant des 'SUM' et 'GROUP' dans les requêtes imbriquées (je pense que c'est l'idée de Maximilian).

    Il serait aussi possible de faire les deux requêtes d'origine puis les lier avec un '[left] join' sur id en affichant 'somme1+somme2'. Ou de faire une requête sur table3 qui additionnera les résultats de deux requêtes imbriquées qui pour chaque ligne vont faire respectivement les sommes correspondantes sur table1 et table2 (mais elles seront exécutées de nombreuses fois alors je ne sais pas si ce sera efficace).

    Je ne sais pas lesquelles de ces solution marchent à partir de quelle version de MySQL.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    table1 et table2 ne sont pas identiques sinon ca règlerais beaucoup de gestion supplémentaire. Le GROUP BY est présent car SUM() le demande (il ne sert à rien puisque aucun ID peux être répété). Je vais faire quelques essais de requête imbriquée merci!

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Je recois une erreur de syntaxe près de UNION ALL (SELECT (SUM(winsSG) - SUM(shutoutsSG)) AS nPtsGoali ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
     
    SELECT * FROM
     (
     (SELECT (SUM(goalsSP) + SUM(assistsSP)) AS nPtsSkaters
     FROM stats_players
     INNER JOIN (drafted, managers)
     ON (stats_players.nIdPlayersSP = drafted.nIdPlayersDrafted AND drafted.nIdManagersDrafted = managers.nIdManagers)
     ) AS virtual1
     UNION ALL
     (SELECT (SUM(winsSG) - SUM(shutoutsSG)) AS nPtsGoalies
     FROM stats_goalies
     INNER JOIN (drafted, managers)
     ON (stats_goalies.nIdGoaliesSG = drafted.nIdPlayersDrafted AND drafted.nIdManagersDrafted = managers.nIdManagers)
     ) AS virtual2
     ) AS virtualmain
     GROUP BY nIdManagers
     ORDER BY nPtsTotal

Discussions similaires

  1. [MySQL-5.1] impossible de faire select sur les tables
    Par frantz001 dans le forum MySQL
    Réponses: 6
    Dernier message: 25/03/2015, 19h15
  2. Réponses: 2
    Dernier message: 03/09/2009, 16h02
  3. critere de selection pr faire un UPDATE sur 1 table
    Par maxizoo dans le forum Langage SQL
    Réponses: 6
    Dernier message: 05/01/2006, 15h35
  4. selection sur une table en fonction de plusieurs ligne
    Par dimdidi dans le forum Langage SQL
    Réponses: 2
    Dernier message: 06/12/2004, 08h42
  5. select sur plusieurs table, question sur jointure
    Par Schulman dans le forum Langage SQL
    Réponses: 7
    Dernier message: 03/09/2004, 13h54

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