2012-02-24 61 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