缺少记录

时间:2017-03-16 17:46:30

标签: sql sql-server

我将视图复制到新表中。但是,视图中存在一些记录,但表中没有。

此外,当我使用SELECT ... NOT IN:

时,我找不到所有丢失的记录
DECLARE @email NVARCHAR(256)='xxx@xxx.com'
SELECT Email FROM dbo.vw_DirectoryData WHERE Email=@email
SELECT Email FROM dbo.tblDirectoryData WHERE Email=@email
SELECT Email FROM dbo.vw_DirectoryData WHERE email NOT IN(SELECT email FROM dbo.tblDirectoryData)

Result:

Email
xxx@xxx.com
(1 row(s) affected)

Email
(0 row(s) affected)

email
(0 row(s) affected)

我尝试了另一个方法:

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

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

    xxx@xxx.com
NULL

    (1 row(s) affected)

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

任何建议如何克服这个问题?

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

NOT IN (SELECT email FROM dbo.tblDirectoryData)
如果取出所有NULL,

将起作用。所以添加WHERE子句。

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

将NULL视为"未知",所以如果电子邮件未知,则不知道它是否与某些东西相等(可能是......)

答案 2 :(得分:0)

我弄清楚了,问题出在数据类型中。我正在从不同的表中读取以创建视图。视图使用UNION ALL组合来自其他3个视图的数据。

我通过创建读取源数据然后将其插入标准表的SSIS包解决了这个问题。然后读取数据并在相同的视图中应用我需要的所有格式和连接。