【发布时间】:2014-10-29 10:23:56
【问题描述】:
我在 MySQL 数据库中有两个表,代表一群人。 c_orig 和 c_now 表将 person_id 映射到 cluster 数字,如下所示:
person_id cluster
0 0
1 0
2 1
... ...
我现在想知道在比较c_now 和c_orig 时有多少人更改了集群(他们来自哪里或去了哪里)。我可以通过以下两个查询来选择流入和流出。
SET @CLUSTER = 0;
SELECT c_orig.cluster, COUNT(c_now.person_id) AS influx
FROM c_now
LEFT JOIN c_orig ON c_orig.person_id = c_now.person_id
WHERE c_now.cluster = @CLUSTER
AND (c_orig.cluster != @CLUSTER OR c_orig.cluster IS NULL)
GROUP BY c_orig.cluster;
SELECT c_now.cluster, COUNT(c_now.person_id) AS outflux
FROM c_now
LEFT JOIN c_orig ON c_orig.person_id = c_now.person_id
WHERE c_orig.cluster = @CLUSTER
AND c_now.cluster != @CLUSTER
GROUP BY c_now.cluster;
这些查询的结果:
cluster influx
NULL 39
1 8
2 5
3 2
4 16
6 9
7 2
8 1
cluster outflux
1 9
2 7
3 46
4 5
6 13
7 2
8 1
9 5
现在我想组合这些查询,当查询中不存在该集群时,流入/流出为 0。但是,我不能OUTER JOIN 他们,两个不同顺序的LEFT JOINs 似乎太麻烦了。我想我忽略了一个简单的方法来实现这一点。谁能帮我吗?期望的输出:
cluster influx outflux
NULL 39 0
1 8 9
2 5 7
3 2 46
4 16 5
6 9 13
7 2 2
8 1 1
9 0 5
【问题讨论】:
标签: mysql outer-join