2015-07-21 108 views
1

我在MySql中有两个表。 表1:MySql LEFT JOIN只从另一个表中返回一个NULL行

id account_no 
1 123 
2 124 
3 125 
4 126 
5 127 

表2:

id amount 
1 200 
1 300 
2 400 
3 300 
2 100 

我所需的输出是:

account_no total_amount 
123 500 
124 500 
125 300 
126 0 
127 0 

我的查询如下

SELECT a.account_no AS 'account_no', IFNULL(SUM(b.amount),0) AS 'total_amount' 
FROM table1 a 
LEFT JOIN table2 b 
ON a.id = b.id 
GROUP BY b.id ORDER BY a.account_no 

但与此查询我越来越多y this

account_no total_amount 
123 500 
124 500 
125 300 
126 0 

任何人都可以帮助我吗?

回答

0

试试这个。

SELECT a.account_no AS 'account_no', IFNULL(SUM(b.amount),0) AS 'total_amount' 
FROM table1 a 
LEFT JOIN table2 b 
ON a.id = b.id 
GROUP BY a.account_no ORDER BY a.account_no 

相反的b.bid,它只有3独特价值组使用a.account_no,这将有所有唯一的帐户。

让我知道任何查询。 :)

+0

谢谢。这有助于:) – rin2

0

这就是为什么你GROUP BY b.id。在你的情况b.id id null为a.id 126和127是null,将被分组。

的结果你参加的最后两行会:

a.id account_no b.id total amount 
4 126 null null 
5 127 null null 

和这些行被分组一行。

+0

对不起,我没有得到它。我在查询 – rin2

+0

@ rin2中有GROUP BY b.id,这会将两行分组为一行,因为它将具有'b.id = null'的所有行分组到一行。 – Jens

0

查询是完美的,除了group by子句,

SELECT a.account_no AS 'account_no', IFNULL(SUM(b.amount),0) AS 'total_amount' 
FROM table1 a 
LEFT JOIN table2 b 
ON a.id = b.id 
GROUP BY a.account_no ORDER BY a.account_no 

LEFT JOIN返回左表中的所有数据,与空如果右表中没有数据,使用组时,你需要给从左表的关键列,因为组通过获得独特的行

请看看,让我知道是否有任何问题。

谢谢 艾米特

相关问题