1

我有两个表,我需要按一列连接它们并在两个表中都有索引。但是这两个表的两个列都包含重复多次的相同值。所以用于连接的列看起来像这样:

表A.column2 表B.column3

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

现在据我从 BNL 和 BKA 算法中了解,它们会从表 A 中一一获取行并在表 B 中查找匹配记录。但是查找第二个匹配记录没有任何意义此 A 表的行,因为该值再次为“1”,它已经具有来自对具有相同列值的 row1 执行的操作的匹配记录。
这只是浪费时间和资源。如果它可以选择表 A.column2 中的不同值,然后在表 B.column3 中查找匹配的记录,然后将它们全部组合在一起,那就更好了。
你能告诉我一些在mysql中加入操作的另一种算法,它可以做我所说的那种事情吗??

4

1 回答 1

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