1

2 つのテーブルがあり、1 つの列で結合する必要があり、両方のテーブルでインデックスが作成されています。しかし、これら 2 つのテーブルの両方の列は、何度も繰り返される同じ値で構成されています。したがって、結合に使用される列は次のようになります。

表A.列2 表B.列3

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

BNL および BKA アルゴリズムから理解できる限り、テーブル A から行を 1 つずつ取得し、テーブル B で一致するレコードを探します。しかし、2 番目の一致するレコードを探すのは意味がありません。この A テーブルの行は、値が再び「1」であるため、同じ列値を持つ行 1 に対して実行された操作からの一致するレコードが既に存在するためです。
それは時間とリソースの浪費に他なりません。テーブル A.column2 で個別の値を選択し、テーブル B.column3 で一致するレコードを探して、それらをすべて一緒にすることができればもっと良かったでしょう。
私が話しているようなことを行う mysql で操作を結合するための別のアルゴリズムを教えてください.??

4

1 に答える 1

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
于 2012-05-01T15:02:38.087 に答える