想象一下下表:

Table A:
x, y

Table B:
a, b


为了找到匹配项,我们将执行以下查询:

SELECT A.x, B.a FROM A, B WHERE A.y = B.b

但是,Table B本身将包含重复项,因此同一value将与Table A中的值(唯一)匹配多次,如何避免这种情况?

编辑:如果在单个查询中无法完成上述操作,则另一个可接受的答案是忽略Table B来查找Table A中的所有重复项,并删除除一个以外的所有重复项。

根据要求编辑2:

Table A

col, 'hi'
col, 'bye'
col, 'lol'
col, 'teehee'
col, 'example'


Table B

col, 'hi'
col, 'hi'
col, 'bye'
col, 'hi'
col, 'bye'
col, 'example'
col, 'teehee'
col, 'lol'
col, 'hi'


因为hi中有多个值byeTable B,它将多次提取Table A中的值(col),这是应该避免的,因为我们谈论的是1000行。

最佳答案

如果要从A获得所有行,并从B获得一个任意值,则可以有几种选择。大多数涉及group bydistinct,这是相当大的支出。性能最高的方法可能是使用相关子查询:

select a.*,
       (select b.a
        from b
        where A.y = B.b
        limit 1
       ) as b_a
from a;


为了提高性能,您需要在b(b)上建立索引。

关于php - 提取不包含交叉表的重复项表重复,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28741404/

10-12 12:41
查看更多