2012-05-01 43 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