2017-10-02 5 views
0

Ich habe zwei Tabellen Customer_staging und Customer. Die customer_staging Tabelle hat die Felder customer_num, birth_date und birth_month und diese Tabelle wird jeden Tag aktualisiert. Alle neuen zusätzlichen Datensätze aus dieser Tabelle sollten in die aktuelle Customer Tabelle aktualisiert werden. Außerdem sollten alle Datensätze, die nicht in den Werten für birth_date und birth_month übereinstimmen, in die Tabelle Customer aktualisiert werden.Finden Sie Unterschiede in Daten zwischen zwei SQL-Server-Tabellen

Ich versuchte die folgende Abfrage.

Select customer_num, birth_date, birth_month from Customer_Staging 
EXCEPT 
Select customer_num, birth_date, birth_month from Customer 
INNER JOIN Customer_Staging ON Customer_Staging.customer_num = Customer.customer_num 

Ich bekomme die Ergebnisse, die ich will, aber ich bekomme mehr Anzahl von Datensätzen. Ich habe den inneren Join im zweiten Teil der Abfrage hinzugefügt, in der Annahme, dass das Resultset auf die Tabelle beschränkt wird, die eine geringere Anzahl an Datensätzen enthält. Die Customer_Staging-Tabelle verfügt über 3170 Datensätze, während die Customer-Tabelle derzeit nur 40 Datensätze enthält. Zum Beispiel, wenn ich 5 Datensätze habe, die zwischen den beiden übereinstimmen, hat die Ergebnismenge 3165 Datensätze. Allerdings möchte ich die Unterschiede Resultset für die Datensätze, die nur in der Customer-Tabelle vorhanden sind.

Kann jemand helfen?

+0

Ich glaube, Sie brauchen Merge – KumarHarsh

Antwort

0

Nest die select:

Select DISTINCT customer_num, birth_date, birth_month from Customer_Staging 
WHERE customer_num NOT IN (Select customer_num 
          From Customer) 
+0

[** 'except' **] (https://docs.microsoft.com/en-us/sql/t-sql/ language-elements/set-operators-except-und-intersect-transact-sql) entfernt Duplikate. – SqlZim

Verwandte Themen