SQL-表联接以比较联接为NULL的NULL值

时间:2018-12-12 19:17:38

标签: sql

我被要求基本上编写一份报告,以显示两个不同数据库中的数据,并能够在两个数据库中查看是否缺少某些内容。

IE,发票编号可能存在​​于database1中,但不存在于database2中,反之亦然。

我在下面有以下查询,但它仅返回第二个表中的所有数据,第一个表为NULL值。我想将其设置为同时返回两者中的NULL值,但是我认为问题是因为我的联接位于可以为NULL的值上,所以它不会返回第一个表中存在的值,而不会返回第二个。

有人可以指导我解决此类问题吗?

据我所知,除非我尝试从每个数据库中联接更多的表,否则不必联接任何其他表。 查询:

Select TC.PO_Number, TC.Invoice_Date, TC.Invoice_, H.RefPoNum, H.InvoiceNum 
From Table1 TC
RIGHT JOIN [SERVERNAME].[DBNAME].[TABLE2] H ON (TC.Invoice_ = H.InvoiceNum)
Where TC.Invoice_Date Between '2018-10-31' AND '2018-10-31' 
AND H.Company Like 'COMPANY'

2 个答案:

答案 0 :(得分:0)

您可以使用full join做您想做的事。使用full join进行过滤非常棘手,因此我建议您使用子查询:

select tc.PO_Number, tc.Invoice_Date, tc.Invoice_, h.RefPoNum, h.InvoiceNum 
From (select tc.*
      from Table1 tc
      where tc.Invoice_Date Between '2018-10-31' AND '2018-10-31'
     ) tc full join
     (select h.*
      from [SERVERNAME].[DBNAME].[TABLE2] h
      where h.Company Like 'COMPANY'
     ) h
     on TC.Invoice_ = H.InvoiceNum;

答案 1 :(得分:0)

只需确保您要比较的列具有相同的数据类型,就可以在下面安全地使用此查询:

Server01不在Server02中

select t1.InvoiceNumber from server01.dbo.Invoice t1
except
select t2.InvoiceNumber from server02.dbo.Invoice t2

Server02不在Server01中

select t1.InvoiceNumber from server02.dbo.Invoice t1
except
select t2.InvoiceNumber from server01.dbo.Invoice t2

P.S。 虽然这可能不是您要查找的确切查询,但是此模板可能会有所帮助。