想象一下以下表格:
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 A
在Table B
中查找所有重复项,并删除除一个之外的所有重复项。
根据请求编辑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'
因为Table B
中有多个值hi
和bye
,它将多次提取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)
上的索引。