2017-03-16 185 views
0

我將視圖複製到新表中。但是,某些記錄存在於視圖中,但不在表格中。缺失記錄

而且,我無法找到所有失蹤的記錄,當我使用SELECT ... NOT IN:

DECLARE @email NVARCHAR(256)='[email protected]' 
SELECT Email FROM dbo.vw_DirectoryData WHERE [email protected] 
SELECT Email FROM dbo.tblDirectoryData WHERE [email protected] 
SELECT Email FROM dbo.vw_DirectoryData WHERE email NOT IN(SELECT email FROM dbo.tblDirectoryData) 

Result: 

Email 
[email protected] 
(1 row(s) affected) 

Email 
(0 row(s) affected) 

email 
(0 row(s) affected) 

我嘗試另一個approche:

DECLARE @email NVARCHAR(256)='[email protected]' 
SELECT  vw_DirectoryData.Email, tblDirectoryData.Email AS [Email in Table] 
FROM   vw_DirectoryData LEFT OUTER JOIN 
         tblDirectoryData ON vw_DirectoryData.Email = tblDirectoryData.Email WHERE [email protected] 

SELECT  vw_DirectoryData.Email, tblDirectoryData.Email AS [Email in Table] 
FROM   vw_DirectoryData LEFT OUTER JOIN 
         tblDirectoryData ON vw_DirectoryData.Email = tblDirectoryData.Email WHERE tblDirectoryData.Email IS null 

    Result: 

    Email 
Email in Table 

    [email protected] 
NULL 

    (1 row(s) affected) 

    Email                                                               Email in Table 
    (0 row(s) affected) 

任何意見如何克服這種問題?

+0

如果您使用子查詢方法,您需要明確指出您擁有哪些表的電子郵件地址。但更好的方法可能是使用EXCEPT。 https://msdn.microsoft.com/en-us/library/ms188055.aspx –

+0

** ** 1:是否有名爲'Email'和'email'(低和大寫名稱),或者不同的領域,你使用不區分大小寫的排序規則,允許您引用獨立於大小寫的列名稱? ** 2 **:視圖和表格匹配的行數(即COUNT(*)')是否相同? 'COUNT(DISTINCT Email)'怎麼樣? – Phylyp

回答

0

我看着辦吧,問題出在數據類型上。我正在閱讀不同的表格來創建視圖。該視圖使用UNION ALL來合併來自另外3個視圖的數據。

我通過創建讀取源數據然後將其插入到標準表中的SSIS包解決了這個問題。然後閱讀數據並應用所有格式並在相同視圖中加入我需要的內容。

0

嘗試使用NOT EXISTS:

SELECT viw.Email 
FROM dbo.vw_DirectoryData viw 
WHERE NOT EXISTS(SELECT tbl.* FROM dbo.tblDirectoryData tbl WHERE tbl.Email = viw.Email) 
+0

不幸的是它沒有工作。我做了以下幾點:截斷表,然後從視圖插入到表中,然後運行腳本,仍記錄不顯示。順便說一句,表和視圖中的記錄數是相同的 – Kdaimati

0

NOT IN (SELECT email FROM dbo.tblDirectoryData) 

會,如果你採取了所有的NULL工作。因此添加WHERE子句。

NOT IN (SELECT email FROM dbo.tblDirectoryData WHERE email IS NOT NULL) 

想想NULL的爲「未知」,因此,如果郵件是未知的,它不知道它是否等於或東西不是(可能是...)