2017-03-16 145 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的为“未知”,因此,如果邮件是未知的,它不知道它是否等于或东西不是(可能是...)