我有两张带有文章的表格。
表1 article
和表2 articlefm
两个表都有一个artnr
字段。
'表1'有2192 artnr
,'表2'有2195 artnr
。
我想在我的查询中找出3篇文章中artnr
未匹配的内容。
如果'表2'有更多文章然后'表1'那么我需要一个包含artnr
的列表。
我该怎么做?
答案 0 :(得分:1)
您可以使用FULL JOIN
:
SELECT COALESCE(t1.Artnr, t2.Artnr) AS Artnr,
CASE WHEN t1.Artnr IS NULL THEN 'Table1' ELSE 'Table2' END AS MissingFrom
FROM Table1 AS t1
FULL JOIN Table2 AS t2
ON t1.Artnr = t2.Artnr
WHERE t1.Artnr IS NULL
OR t2.Artnr IS NULL;
请注意,仅仅因为3的计数存在差异,并不一定意味着一个表中只有3个记录从另一个表中丢失。想象一下:
Table1 Table2
------ -------
1 2
2 4
3 6
4
计数的差异是1,但是table1中实际上有2条记录在table2中不存在,而table2中的1则不在table1中。使用上面的完整连接方法,您将获得如下结果:
Artnr | MissingFrom
------+-------------
1 | Table1
3 | Table1
6 | Table2
答案 1 :(得分:0)
在大多数数据库中,您可以使用except
(SQL标准)或minus
(特定于Oracle):
select artnr
from articlefm -- table 2
except
select artnr
from article -- table 1
否则你可以试试not in
:
select atrnr
from articlefm -- table 2
where atrnr not in
( select artnr
from article -- table 1
)
这将为您提供2中存在但不包含在1中的文章编号。