2017-03-16 14 views
0

新しいテーブルにビューをコピーしました。ただし、一部のレコードはビューには存在しますが、テーブルには存在しません。どのようにこれを克服するためにレコードがありません

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) 

何かアドバイス:

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を試してみました:私はNOT IN ... SELECTを使用する場合

さらに、私は不足しているすべてのレコードを見つけることができません問題?

+0

サブクエリのアプローチを使用する場合、どのテーブルの電子メールアドレスを明示する必要があります。しかし、より良いアプローチはEXCEPTを使用することです。 https://msdn.microsoft.com/en-us/library/ms188055.aspx –

+0

** 1 **:「電子メール」と「電子メール」(大文字または小文字の名前)という別々のフィールドがありますか、使用していますか大文字と小文字を区別しない列名を参照できる大文字小文字を区別しない照合? ** 2 **:ビューとテーブルの両方の行のカウント(つまり、COUNT(*))は一致していますか? COUNT(DISTINCT Email)はどうですか? – Phylyp

答えて

0

、問題はデータ型にありました。ビューを作成するために別のテーブルから読んでいました。ビューは3つのビューからのデータを結合するためにUNION ALLを使用します。

ソースデータを読み込んで標準のテーブルに挿入するSSISパッケージを作成してこの問題を解決しました。その後、データを読み込んですべてのフォーマットを適用し、同じビューで必要なものに結合します。

0

ないで使用してみてくださいが存在します。あなたがNULL値のすべてを取る場合

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) 

は動作します。 WHERE句を追加してください。 NULLの

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

考える「不明」として、電子メールは、それが何かかと等しい場合、それは知らない未知の場合そう(かもしれない...)私はそれを把握