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 :

Soustraction de résultats de deux requêtes


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 134
    Points : 71
    Points
    71
    Par défaut Soustraction de résultats de deux requêtes
    Bonjour,

    j'ai un petit problème avec une soustraction de résultats de deux requêtes...
    je ne souhaite pas faire une soustraction basique sur deux champs de tables différentes (par exemple "SELECT champ1.t1-champ2.t2 etc"..), mais une soustraction sur des résultats calculés

    Grosso-modo, j'ai deux requêtes :
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    SELECT count( * ) AS NB1, b2722_data.`Ordre_2` AS TYPE1
    FROM b2717_data
    LEFT JOIN b2722_data ON b2717_data.`Type_2` = b2722_data.`id`
    GROUP BY TYPE1;
     
    Me retourne quelque chose du genre :
    NB1    TYPE1
    4           1
    4           2
    4           3
     
     
     
    Et ma deuxième requête :
     
    SELECT count( * ) AS NB2, b2722_data.`Ordre_2` AS TYPE2
    FROM b2717_data
    LEFT JOIN b2722_data ON b2717_data.`Type_2` = b2722_data.`Ordre_2`
    LEFT JOIN b2720_data ON b2720_data.`Meuble_2` = b2717_data.`id` 
    LEFT JOIN b2719_data ON b2720_data.`Reservation_1` = b2719_data.`id` 
    WHERE b2719_data.`Periode_du_2`>="2011-05-20" AND b2719_data.`Periode_au_3`<=DATE_ADD("2011-06-15", INTERVAL 10 DAY )
    GROUP BY TYPE2; 
     
     
    Me retourne quelque chose comme :
    NB2    TYPE2
    2         1
               2
    1         3

    Là où je coince, c'est que j'aimerai pouvoir soustraire chaque ligne entre elle... pour bien me faire comprendre, il me faudrait quelque chose comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    NB1-NB2        TYPE1
    2                    1
    4                    2
    3                    3

    Je pensais mettre les deux résultats de mes deux requêtes dans deux tables temporaires TMP1 et TMP2 (pour ensuite faire une soustraction de type SELECT (NB1.TMP1-NB2.TMP2),TYPE1.TMP1...), mais je n'ai pas le droit d'utiliser de tables temporaires..

    Une solution ? Merci beaucoup

  2. #2
    Expert éminent Avatar de kain_tn
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 671
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 671
    Points : 7 811
    Points
    7 811
    Par défaut
    Et comme ça, ça ne peux pas fonctionner?

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    SELECT
    	rq1.NB1 - rq2.NB2 AS 'NB1 - NB2',
    	rq1.TYPE1
    FROM
    (
    	SELECT 
    		count( * ) AS NB1, 
    		b2722_data.`Ordre_2` AS TYPE1
    	FROM b2717_data
    		LEFT JOIN b2722_data 
    			ON b2717_data.`Type_2` = b2722_data.`id`
    	GROUP BY TYPE1
    ) rq1, (
    	SELECT 
    		count( * ) AS NB2, 
    		b2722_data.`Ordre_2` AS TYPE2
    	FROM b2717_data
    		LEFT JOIN b2722_data 
    			ON b2717_data.`Type_2` = b2722_data.`Ordre_2`
    		LEFT JOIN b2720_data 
    			ON b2720_data.`Meuble_2` = b2717_data.`id` 
    		LEFT JOIN b2719_data 
    			ON b2720_data.`Reservation_1` = b2719_data.`id` 
    	WHERE b2719_data.`Periode_du_2`>="2011-05-20" AND 
    		b2719_data.`Periode_au_3`<=DATE_ADD("2011-06-15", INTERVAL 10 DAY )
    	GROUP BY TYPE2
    ) rq2;

  3. #3
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    kain_tn, en écrivant les jointures selon la norme en vigueur depuis 1992 avec l'opérateur JOIN, tu te serais rendu compte que ta requête ne comporte pas de condition de jointure, ce qui revient à faire un produit cartésien entre les deux sous_requêtes !

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    SELECT
        rq1.NB1 - rq2.NB2 AS 'NB1 - NB2',
        rq1.TYPE1
    FROM
    (
        SELECT 
            count( * ) AS NB1, 
            b2722_data.`Ordre_2` AS TYPE1
        FROM b2717_data
            LEFT JOIN b2722_data 
                ON b2717_data.`Type_2` = b2722_data.`id`
        GROUP BY TYPE1
    ) rq1
    INNER JOIN 
    (
        SELECT 
            count( * ) AS NB2, 
            b2722_data.`Ordre_2` AS TYPE2
        FROM b2717_data
            LEFT JOIN b2722_data 
                ON b2717_data.`Type_2` = b2722_data.`Ordre_2`
            LEFT JOIN b2720_data 
                ON b2720_data.`Meuble_2` = b2717_data.`id` 
            LEFT JOIN b2719_data 
                ON b2720_data.`Reservation_1` = b2719_data.`id` 
        WHERE b2719_data.`Periode_du_2`>="2011-05-20" AND 
            b2719_data.`Periode_au_3`<=DATE_ADD("2011-06-15", INTERVAL 10 DAY )
        GROUP BY TYPE2
    ) rq2 ON rq2.TYPE2 = rq1.TYPE1

  4. #4
    Expert éminent Avatar de kain_tn
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 671
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 671
    Points : 7 811
    Points
    7 811
    Par défaut
    Argh! mea culpa

Discussions similaires

  1. [WD15] Soustraction des résultats de deux requêtes
    Par djenny dans le forum WinDev
    Réponses: 11
    Dernier message: 30/01/2014, 15h25
  2. Soustraction de résultats de deux requêtes
    Par louay02 dans le forum Sybase
    Réponses: 4
    Dernier message: 04/04/2012, 11h48
  3. Soustraction des résultats des deux requêtes sql en access
    Par samsamo dans le forum Requêtes et SQL.
    Réponses: 31
    Dernier message: 24/09/2011, 03h18
  4. Importer le résultat de deux requête dans un Excel
    Par alexandrebergercyr dans le forum VBA Access
    Réponses: 3
    Dernier message: 08/05/2007, 18h21
  5. Afficher le ratio du résultat de deux requêtes
    Par decour dans le forum Access
    Réponses: 25
    Dernier message: 07/11/2005, 19h54

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