【发布时间】:2014-08-13 15:36:37
【问题描述】:
假设我有两张桌子:
CREATE TABLE `test_a` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
还有
CREATE TABLE `test_b` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`A_id` int(11) NOT NULL,
`Amount` float NOT NULL,
`cat` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `test_b_ibfk_1` (`A_id`),
CONSTRAINT `test_b_ibfk_1` FOREIGN KEY (`A_id`) REFERENCES `test_a` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
在test_a中我输入了数据
1,A
2、乙
3、C
在第二个表中,我输入了以下数据:
1、1、4.78、1
2、2、77、1
3、1、0.22、1
4、2、13、1
任务是:选择所有金额的总和,按a_id分组,必须出现来自test_a的所有数据。 因此,我使用的是右外连接。 当我运行以下查询时:
SELECT a.name, sum(b.amount)
FROM test_b AS b RIGHT OUTER JOIN test_a AS a ON b.A_id = a.id
GROUP BY b.A_id;
这会根据需要提供结果集。像这样:
C -- 空
A -- 5
B -- 90
但是当我使用 WHERE 子句时:
SELECT a.name, sum(b.amount)
FROM test_b AS b RIGHT OUTER JOIN test_a AS a ON b.A_id = a.id
**where b.cat =1**
GROUP BY b.A_id;
我得到结果:
A -- 5
B -- 90
我的问题是:如何使用 WHERE 子句达到相同的结果。 (我希望出现“C – null”)
提前致谢!!!
【问题讨论】:
标签: mysql where-clause outer-join