2012-05-01 44 views
1

我有兩個表,我需要通過一列連接並在兩個表中建立索引。但是這兩張表的兩列都包含重複許多次的相同值。因此,用於連接看起來像這樣的列:優化mysql連接當列中有很多重複數據加入時

TableA.column2表B.column3

1    2 
    1    2 
    1    1 
    4    1 
    4    4 
    5    3 

現在據我從BNL和BKA算法瞭解,他們將採取從表格中的行逐一查找表B中的匹配記錄。但是,查找此A表的第二行的匹配記錄是沒有意義的,因爲該值再次爲「1」,因此它已具有匹配的記錄從具有相同列值的row1執行的操作。
這只是浪費時間和資源。如果它能夠選擇表A.column2中的不同值,然後查找表B列3中的匹配記錄,然後將它們全部結合在一起,那將會更好。
你能告訴我一些在mysql中加入操作的另一種算法,它可以處理我正在談論的那種事情。

+0

因爲答案是不完全正確,你可能會更好,更新你的問題,表明你希望把它弄出來的東西。 – DRapp

回答

0

通過使用Distinct將確保返回的最終列中的唯一性。現在,執行左連接將確保所有來自TableA ...但是,如果tableB中沒有匹配記錄,則COALESCE()將返回值0而不是null - 因此表示tableB文件中沒有記錄。

select TA.Column2, GROUP_CONCAT(TB.Column3 order by TB.Column3) As Column3Values 
    from 
     TableA TA 
     LEFT JOIN TableB TB 
      on TA.Column2 = TB.Column3 
    group by 
     TA.Column2 

從你的數據,你應該得到類似

Column2 Column3Values 
1  1, 2 
4  1, 4 
5  3 
+0

不,我正在問不同的事情。更清楚地陳述有點複雜和冗長。我想我需要自己解決。無論如何感謝 – Legolas

+0

@Koustubh,通過重新審查你的問題,我想你可能想要的是GROUP CONCATINATION ...這將爲每個「鍵」創建一行,並且任何這樣的條目的連接的第二列被逗號分隔最終結果...例如:Column2 = 1,Column3 = 1,2 – DRapp