2012-05-01 9 views
1

私は1つのカラムで結合する必要がある2つのテーブルを持っていて、両方のテーブルでインデックスされています。しかし、これら2つのテーブルの両方の列は、同じ値が何回も繰り返されて構成されています。このように見て何かを接合するために使用さそうカラム:今、私の知る限りBNLとBKAアルゴリズムから理解し、彼らはテーブルAから行にかかる多くの反復的なデータがカラムに入っているときにmysql joinを最適化する

TableA.column2表B.column3

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

1つずつテーブルBの一致するレコードを探します。しかし、値が再び "1"であるため、このAテーブルの2番目の行の一致するレコードを探すのは意味がありません。同じ列値を持つrow1に対して実行された操作から削除します。
時間とリソースの無駄にすぎません。それがテーブルA.column2の別個​​の値を選ぶことができれば、テーブルB.column3の一致するレコードを探して、それらをまとめてまとめるほうが良いでしょう。
私が話しているようなことをするmysqlの操作に参加するための別のアルゴリズムを教えてもらえますか?

+0

のようなものを取得する必要があります。 – DRapp

答えて

0

Distinctを使用すると、返される最終列の一意性が保証されます。今、左結合を行うとTableAからのすべてが保証されます。ただし、tableBに一致するレコードがない場合、COALESCE()はnullではなく0の値を返します。したがって、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 ...これは "キー"ごとに1行を作成し、コンマで区切られた最終結果... ex:Column2 = 1、Column3 = 1,2 – DRapp

関連する問題