2013-08-21 2 views
1

Le résultat que je veux, »MySQL problème de sous-requête

price1 | price2 
1. 10000 | 2. -100 
3. 20000 | 4. -200 

les requêtes qui seront sélectionnées,

  1. select total_price from cloud_payment where user_id='snoopy99' and demandnum= '201307-charge0000040C'

  2. select unpaid_price from gcloud.cloud_service_basic where user_id='snoopy99' and month=7

  3. select total_price from gcloud.cloud_payment where user_id='snoopy99' and demandnum= '201308-charge0000040C'

  4. select unpaid_price from gcloud.cloud_service_basic where user_id='snoopy99' and month=8

Je veux 1,3 pour être dans la première colonne 2,4 pour être dans la deuxième colonne.

Une bonne idée?

Répondre

3

Essayez.

select total_price as price from cloud_payment where user_id='snoopy99' and (demandnum= '201307-charge0000040C' OR demandnum= '201308-charge0000040C') 
UNION ALL 
select unpaid_price as price from gcloud.cloud_service_basic where user_id='snoopy99' and (month=7 OR month=8) 
0

Vous pouvez utiliser JOIN pour sélectionner un enregistrement fusionné à partir de vos tables de service et de paiement, puis UNION pour sélectionner deux de ces dossiers. Quelque chose comme ceci:

SELECT total_price, unpaid_price 
    FROM cloud_payment cp 
    JOIN gcloud.cloud_service_basic cs ON cp.user_id = cs.user_id 
    WHERE cp.user_id = 'snoopy99' 
    AND cp.demandnum = '201307-charge0000040C' 
    AND cs.month = 7 
UNION 
SELECT total_price, unpaid_price 
    FROM cloud_payment cp2 
    JOIN gcloud.cloud_service_basic cs2 ON cp2.user_id = cs2.user_id 
    WHERE cp2.user_id = 'snoopy99' 
    AND cp2.demandnum = '201308-charge0000040C' 
    AND cs2.month = 8 
; 

Example SQLFiddle.