2013-02-06 161 views
1

事實表連接兩張表:
如何利用番石榴

Id Year Month countryId Sales 
1 1999 1  1   3000 
2 1999 2  1   2300 
3 2000 3  2   3999 
4 2000 4  3   2939 

尺寸表:

Id country province 
1 US  LA 
2 US  CA 
3 US  GA 
4 EN  LN 

我用番石榴表是這樣的:

Table<Integer, String, Object> table = Tables.newCustomTable(
     Maps.<Integer, Map<String, Object>> newLinkedHashMap(), 
     new Supplier<Map<String, Object>>() { 
      public Map<String, Object> get() { 
       return Maps.newLinkedHashMap(); 
      } 
     }); 

    table.put(1, "Year", 1999); 
    table.put(1, "Month", 1); 
    table.put(1, "countyId", 1); 
    table.put(1, "Sales", 3000); 
    // ...... etc 


    table1.put(1, "county", "US"); 
    table1.put(1, "provice", 1999); 
    // ...... 

我想要實現a LEFT JOIN like:

1 1999 1 1 3000 US LA 
2 1999 2 1 2300 US LA 
3 2000 3 2 3999 US CA 
4 2000 4 3 2939 EN LN 

我該怎麼辦?

+0

數據來自哪裏?它是一個數據庫嗎?是否有可能在查詢中進行連接? – maksimov

+1

'table1.putAll(table2);'? – assylias

+0

也許一些來自MySQL的diff數據源和另一個來自Excel - –

回答

3

番石榴的Table不應該像任何SQL的表一樣使用,因爲它是一個集合。 SQL的表格被設計爲可索引,可排序,可過濾等。番石榴的Table只有這些的一小部分,並且只是間接的,並且關節不是它們的一部分(除非你玩轉換)。

你需要做的是讓你的兩個表遍歷table的元素並在table1中找到相應的映射。

在你的情況,我相信你用List代替table和番石榴Table代替table1更好。循環訪問列表,並在獲取元素時製作最終對象。

+0

+1同意。 Guava中的'Table'用於描述數據結構,如Map >'。 –