2017-09-21 79 views
1

我有两个mysql表。 表:议案如何查询两个mysql表的一个字段的总和

id | billtype | amount | advid | paydate |adjid | adjdate | 
1 | electric | 10000 | 123 | 2017-01-01 | 50 | 2017-01-03 | 
2 | Water | 5000 | 124 | 2017-02-01 | 0 | 0000-00-00 | 
3 | Shirt | 500 | 125 | 2017-03-01 | 0 | 0000-00-00 | 

表:提前

id | advid | amount | balance | purpose | 
1 | 123 | 50000 | 20000 | Bill | 
2 | 124 | 70000 | 10000 | Bill | 
3 | 125 | 55000 | 15000 | Uniform | 
4 | 124 | 60000 | 10000 | Bill | 

我想创建一个下拉菜单,以便选择哪些还没有调整过的“提前”(adjid = 0和adjdate = 0000 -00-00)表:账单和下拉菜单也将包含预先对相同提前ID(ADVID的合计值)象下面这样:

<option>Bill-130000</option> 
<option>Uniform-55000</option> 

作为总130000(70000 + 60000)的进步是德en对付预付ID 124,所以在Bill的情况下,Option菜单中的Advance总额应该是130000。但我没能准确地计算出提前总量:

SELECT sum(a.amount), purpose FROM bill as b, advance as a WHERE b.paydate!='0000-00-00' AND b.adjid!=0 AND a.advid=b.advid GROUP BY a.advid 

在​​3210总额不来实际的。

什么是适合此目的的查询?

+0

你得到正确的结果。条件'b.paydate!='0000-00-00'AND b.adjid!= 0'只会给'bill'表中的'advid' = 123,因此只会给你50000. –

+0

通常,你会GROUP由您的SELECT中的非聚合列组成。 – Strawberry

回答

2

你可以尝试

SELECT SUM(a.amount) AS amount, 
     MAX(purpose) AS purpose 
FROM advance a 
WHERE a.advid IN (
       SELECT b.advid 
       FROM bill b 
       WHERE b.paydate = '0000-00-00' 
         AND b.adjid = 0) 
GROUP BY a.advid 
+0

太棒了!感谢您的代码。 –

相关问题