2013-06-17 2 views
0

J'ai du mal à construire une requête mysql. Je dois obtenir des données de deux tables:
Requête mysql relationnelle complexe avec somme

Table cash 
---------- 
id 
income_money 
cashdata_id 
paymentterm 

_

Table cash_data 
------------ 
id 
total 
user 
date 

Alors cash_data détient les paiements qui doivent être payés, et cash détient les paiements enregistrés qui sont déjà traitées.
Lorsqu'un paiement est marqué comme terminé, la ligne correspondante dans cash_data est mise à jour avec l'ID associé user et date.
L'idée est de faire une requête à partir de cash_data et de vérifier quels paiements ont une certaine somme d'argent payée mais qui ne sont pas marqués comme complets (c'est-à-dire qui n'ont pas les champs user et date).
D'accord, c'était simple d'ici.
Le problème est qu'il peut y avoir plusieurs lignes de la table cash se rapportant à une cash_data ligne et je dois sélectionner toutes les lignes cash_data, puis sélectionnez les cash relationnelles lignes et résumer la cash.income_money - parce que je dois comparer cash.total avec cash.income_money.

+0

Si les réponses ci-dessous ont pas permis de résoudre votre problème, envisager de fournir un sqlfiddle. – Strawberry

Répondre

0

argent la somme de la requête:

Il utilise également une jointure gauche pour montrer les lignes qui ne peuvent pas encore avoir des paiements.

SELECT cd.id, 
     cd.total, 
     sum(c.income_money) AS "Total Income" 
FROM cash_data cd 
LEFT JOIN cash c ON c.cashdata_id = cd.id 
GROUP BY cd.id, 
     cd.total; 

la première requête qui est assez simple:

select cd.id, cd.total, sum(c.income_money) as "Total Income" from 
cash_data cd left join cash c 
on c.cashdata_id = cd.id 
group by cd.id, cd.total; 

SQL Fiddle: http://www.sqlfiddle.com/#!2/800b4/6

0

Vous devez joindre les deux tables. Comme ceci:

SELECT SUM(cash.income_money), cash_data.total, cash_data.id 
FROM cash_data 
    JOIN cash ON cash.cashdata_id=cash_data.id 
+0

Ne voyez aucun groupe par ... Cela ne fera que totaliser toutes les sommes pour tout. Voir: http://www.sqlfiddle.com/#!2/800b4/5 contenant votre SQL d'origine comme deuxième requête. –