2010-06-07 91 views
1

我正在開發一個ETL過程,並且需要橋表實現事實表和維表(MySQL數據庫)之間的一對多關係。有數量有限的組合(數千),所以我想重新使用橋接表中的組密鑰來限制大小。從橋接表中獲取組密鑰

任何一組屬於事實行將包含許多維鍵(1到15)的尺寸,分配到一個唯一的組密鑰,如下:

group_key | dimension_key 
----------------------- 
1   | 1 
1   | 3 
1   | 4 
2   | 1 
2   | 2 
2   | 3 
3   | 1 
3   | 4 

我怎麼去檢索維度1,3,4(即1)的唯一組密鑰?

+0

你能澄清你要求的是什麼嗎? – VeeArr 2010-06-07 07:51:57

回答

1

我想你要求一個查詢返回的組,使得所有尺寸在一個特定的列表與該組相關聯。也就是說,必須存在將該組映射到每個維度的行,並且您想知道哪些組滿足此要求。

SELECT f1.group_key 
FROM facts f1 
JOIN facts f2 ON (f1.group_key = f2.group_key) 
JOIN facts f2 ON (f1.group_key = f2.group_key) 
WHERE f1.dimension_key = 1 
    AND f2.dimension_key = 3 
    AND f3.dimension_key = 4; 

另一種解決方案是該組中的數匹配行:

SELECT f.group_key 
FROM facts f 
WHERE f.dimension_key IN (1,3,4) 
GROUP BY f.group_key 
HAVING COUNT(*) = 3; 

但我發現,通常GROUP BY特別是在MySQL性能殺手。

+0

您首次提出的解決方案正是我所期待的!謝謝 :) – 2010-06-07 08:50:52

0

如果我理解正確的話,你想要的是一個橋接表看起來像這樣:

group_key | dimension_set 
----------------------- 
1   | (1, 3, 4) 
2   | (1, 2, 3) 
3   | (1, 4) 

你有2個選擇,我可以看到。

您可以將整個網橋表格拉入程序,然後以編程方式確定維度集中的組鍵。

或者您可以使用數學公式來編碼維度鍵,以得到一個比您可以索引的整數。

類似於a + (b * 32) + (c * 32 * 32) + ...使用包含唯一尺寸數量的2的最低次冪。