通过列上的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
(即跳过共同值7
和31
)。
答案 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)