提取不包含的跨表重复项。表重复

时间:2015-02-26 11:36:28

标签: php mysql sql

想象一下下面的表格:

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行。

1 个答案:

答案 0 :(得分:1)

如果您想要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)上的索引。