我有一張表,我需要知道哪些數據已從前一天更新爲今天。假設前幾天數據在t1和當前日數據在t2中,我試圖對所有列執行「t1 FULL OUTER JOIN t2」(因爲我需要在整個表上獲取更新,而不考慮任何列),其中t2的每列都是NULL 。SQL Server:查詢獲取表增量更新
問題是,如果t1中的某一行在其任何列中都有空值,並且即使這些行在t2中保持不變,也會導致輸出,這是我不想要的。這是我的情況的一個例子。
create table t1(Host varchar(20), location varchar(20), OS varchar(20))
create table t2(Host varchar(20), location varchar(20), OS varchar(20))
insert into t1 (Host,location,OS)
values ('Host1','Location1','Linux'),
('Host2','Location2','Unix'),
('Host3','Location3','Solaris'),
('Host4','Location4','Windows'),
('Host5',null,'linux') ---> Host5 remains same in both tables
insert into t2 (Host,location,OS)
values ('Host1','Location1','Linux'),
('Host2','Location2','Unix'),
('Host3','Location3','Windows'),
('Host4','Location7','Windows'),
('Host5',null,'linux') ---> Host5 remains same in both tables
查詢:
SELECT distinct t1.Host, t1.location, t1.OS
FROM t1 FULL OUTER JOIN
t2 ON t1.Host = t2.Host
AND t1.location = t2.location
AND t1.OS = t2.OS
WHERE (t2.Host IS NULL) OR
(t2.location IS NULL) OR
(t2.OS IS NULL)
輸出爲:
Host location OS --------------------------- NULL NULL NULL Host3 Location3 Solaris Host4 Location4 Windows Host5 NULL linux
在預期的結果主機5需要爲同一行中的兩個表中存在被刪除。
我明白這是由於數據中WHERE條件和NULL值的FULL OUTER JOIN的本質。只是想知道是否有其他選擇只獲取更新的記錄。
你想要一個左連接而不是一個完整的外連接。 – Hogan