加入一列并返回不相互的记录

时间:2014-02-04 13:31:48

标签: mysql

通过列上的JOIN选择所有记录的最简单方法是什么,并返回共享的值,即每个表的列是唯一的?

我正在寻找的东西类似于PHP的array_diff();

因此,如果表列包含以下值:

Table 1 column values: 1, 45, 7, 99, 31

Table 2 column values: 100, 3, 7, 31, 22

结果应该返回以下值:1, 45, 99, 100, 3, 31, 22(即跳过共同值731)。

2 个答案:

答案 0 :(得分:1)

这是基于文本"返回他们不共享的值,即每个表的列是唯一的?"。

有几种方法可以解决这个问题。也许最明显的是从第一张桌子而不是第二张桌子拿走所有东西,反之亦然:

select value
from table1
where not exists (select 1 from table2 where table2.value = table1.value)
union all
select value
from table2
where not exists (select 1 from table1 where table2.value = table1.value);

如果你在两个表中都没有重复项,那么另一种方法是将表合并在一起,然后返回只出现一次的表:

select value
from (select value from table1 union all
      select value from table2
     ) t
group by value
having count(*) = 1;

编辑:

array_diff的等价物只是:

select value
from table1
where not exists (select 1 from table2 where table2.value = table1.value)

它不对称。

答案 1 :(得分:-1)

使用NOT IN。

SELECT id FROM table1 WHERE id NOT IN (SELECT id FROM table2)