我将视图复制到新表中。但是,视图中存在一些记录,但表中没有。
此外,当我使用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)
任何建议如何克服这个问题?
答案 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包解决了这个问题。然后读取数据并在相同的视图中应用我需要的所有格式和连接。