我用兩個數據源(表)ODS.dbo.Account_Address__c
和PAF.dbo.Delivery_Addresses
做出關於地址的數據統計彙總表ODS.dbo.Account_Address__c
。表PAF.dbo.Delivery_Addresses
用於查找和內部連接。如何找到在SQL查詢剩餘行
所有感興趣的數據都是自CreatedDate=2016-09-28
以來的所有行以及2016-09-28
之前的IsCurrent=1
。
表1:
SELECT DPID__c,CreatedDate
FROM ODS.dbo.Account_Address__c
WHERE CreatedDate>='2016-09-28'
UNION ALL
SELECT DPID__c,CreatedDate
FROM ODS.dbo.Account_Address__c
WHERE CreatedDate<'2016-09-28' AND IsCurrent=1
總共有265773 rows
。
然後我通過內部加入子集數據PAF.dbo.Delivery_Addresses
,241565 rows
被返回。
表2:
SELECT
aa.DPID__c, aa.CreatedDate
FROM
ODS.dbo.Account_Address__c aa ,PAF.dbo.Delivery_Addresses da
WHERE
aa.DPID__c = CONVERT(VARCHAR,da.DELIVERY_POINT_ID)
AND aa.CreatedDate>='2016-09-28'
AND aa.DPID__c IS NOT NULL
UNION ALL
SELECT
aa.DPID__c,aa.CreatedDate
FROM
ODS.dbo.Account_Address__c aa ,PAF.dbo.Delivery_Addresses da
WHERE
aa.DPID__c = CONVERT(VARCHAR,da.DELIVERY_POINT_ID)
AND aa.CreatedDate<'2016-09-28'
AND aa.DPID__c IS NOT NULL
AND aa.IsCurrent=1
接着我還檢查其他兩個子集。
表3:
NULL 11170 rows
的DPID__c
:
SELECT DPID__c,CreatedDate
FROM ODS.dbo.Account_Address__c
WHERE CreatedDate>='2016-09-28' AND DPID__c IS NULL
UNION ALL
SELECT DPID__c,CreatedDate
FROM ODS.dbo.Account_Address__c
WHERE CreatedDate<'2016-09-28' AND IsCurrent=1 AND DPID__c IS NULL
並拒絕內部聯接設置,12982 rows
返回。
表4:
SELECT a.DPID__c,a.CreatedDate
FROM
(
SELECT DPID__c,CreatedDate
FROM ODS.dbo.Account_Address__c
WHERE CreatedDate>='2016-09-28' AND DPID__c IS NOT NULL
UNION ALL
SELECT DPID__c,CreatedDate
FROM ODS.dbo.Account_Address__c
WHERE CreatedDate<'2016-09-28' AND DPID__c IS NOT NULL AND IsCurrent=1
) a
EXCEPT
SELECT t.DPID__c,t.CreatedDate
FROM
(
SELECT
aa.DPID__c, aa.CreatedDate
FROM
ODS.dbo.Account_Address__c aa ,PAF.dbo.Delivery_Addresses da
WHERE
aa.DPID__c = CONVERT(VARCHAR,da.DELIVERY_POINT_ID)
AND aa.CreatedDate>='2016-09-28'
AND aa.DPID__c IS NOT NULL
UNION ALL
SELECT
aa.DPID__c, aa.CreatedDate
FROM
ODS.dbo.Account_Address__c aa ,PAF.dbo.Delivery_Addresses da
WHERE
aa.DPID__c = CONVERT(VARCHAR,da.DELIVERY_POINT_ID)
AND aa.CreatedDate<'2016-09-28'
AND aa.DPID__c IS NOT NULL
AND aa.IsCurrent=1
) t
經覈實,Count_Row(Table 1)>Count_Row(Table 2)+Count_Row(Table 3)+Count_Row(Table 4)
仍然有Table 1
但不是在任何其他表56
額外行。
任何人都可以幫助建議如何發生這種差距,我怎麼能檢測到其餘56 rows
?
乾杯
'UNION ALL'表2,3和4以及'EXCEPT'表1的結果。如果沒有任何返回值,則意味着這56行是表2和/或3和/或4中某些行的精確重複。 – Alex
@Alex感謝您的好建議。 – LUSAQX