2012-02-24 81 views
6

我正在执行几个选择并希望计算重叠。示例:SQL选择工会中多个项目

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部分可能是普通选择或存储过程)。

+0

你有固定的表的数量和条目或他们可能会有所不同?你可以用0代替每个缺失的ID,然后总结第一,第二,第三个元素等...虽然不是一个优雅的解决方案 – Andrew 2012-02-24 17:24:00

+0

我喜欢多重性... – Ben 2012-02-24 17:24:52

回答

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 
+0

谢谢。你知道我是否可以增加重量吗?在'baz'上的权重为3,我的例子最终会以'id = 5,multiplicity = 5; id = 6,multiplicity = 3'结束? – spraff 2012-02-26 14:25:02

+0

像这样: SELECT ID,总和(FULLCOUNT)AS多重 FROM ( SELECT ID,(计数(ID)*重量)作为FULLCOUNT FROM #foo组由ID,重量 UNION ALL SELECT ID,(计数(id)*重量)as fullcount FROM #bar group by id,weight UNION ALL SELECT id,(count(id)* weight)as fullcount FROM #baz group by id,weight )AS TablesTogether GROUP BY id – 2012-02-26 18:01:34

0

这里的加权溶液(weight_Fooweight_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