6

我正在执行几个选择并希望计算重叠。例子:

SELECT id FROM foo WHERE ...
SELECT id FROM bar WHERE ...
SELECT id FROM baz WHERE ...

分别调用这些查询 a、b 和 c。假设 a 给出 (1,2,3,4,5),b 给出 (1,3,5),c 给出 (4,5,6)。我想结合这些并计算多重性。对于上面的示例,我正在寻找的结果是

id | multiplicity
-----------------
1  | 2
2  | 1
3  | 2
4  | 2
5  | 3
6  | 1

如何在一个查询中在 MySQL5 中执行此操作?(a、b 和 c 部分可能是普通选择或存储过程)。

4

2 回答 2

7

我目前无法验证这一点,但我相信这会奏效

SELECT id, count(id) AS multiplicity 
FROM
(
    SELECT id FROM foo WHERE ...
    UNION ALL
    SELECT id FROM bar WHERE ...
    UNION ALL
    SELECT id FROM baz WHERE ...
) AS TablesTogether
GROUP BY id
于 2012-02-24T17:21:03.627 回答
0

这是加权解决方案的格式化版本(weight_Foo并且weight_Bar是常量)

SELECT id, sum(fullcount) AS multiplicity
FROM (
    SELECT id, weight_Foo as fullcount FROM Foo WHERE ...
    UNION ALL
    SELECT id, weight_Bar as fullcount FROM Bar WHERE ...
) AS TemporaryTableName
GROUP BY id
于 2012-02-26T18:31:55.860 回答