提取跨表重复项,不包括表重复项


Extract cross-table duplicates not incl. table duplicates

想象一下以下表格:

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 ATable 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中有多个值hibye,它将多次提取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)上的索引。