想象一下下表:
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
中有多个值bye
和Table B
,它将多次提取Table A
中的值(col),这是应该避免的,因为我们谈论的是1000行。 最佳答案
如果要从A
获得所有行,并从B
获得一个任意值,则可以有几种选择。大多数涉及group by
或distinct
,这是相当大的支出。性能最高的方法可能是使用相关子查询:
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/