Benutzer mit den meisten Antworten
Nur geänderte Datensätze anzeigen durch Vergleich zweier Tabellen

Frage
-
Hallo,
ich habe auf einem MS SQL Server 2008 R2 Standard eine Datenbank mit 2 Tabellen, die einen unterschiedlichen Stand von Artikeldatensätzen beinhalten:
- Tabelle neu: enthält Artikeldaten mit vielen Spalten von heute, z.B. ID = 1, Bezeichnung = ArtikelXY, Preis = 1,50
- Tabelle alt: enthält Artikeldaten mit vielen Spalten von gestern, z.B. ID = 1, Bezeichnung = ArtikelXY, Preis = 1,70
Jetzt möchte ich über eine SQL Abfrage alle Artikel mit gleicher ID vergleichen und u.a. feststellen, ob sich die beiden Datensätze in irgendeiner Spalte unterschieden.
- Wenn die beiden Datensätze mit gleicher ID vollständig identisch sind (auch gleiche Preise im Gegensatz zum Beispiel), interessiert mich der Datensatz nicht.
- Wenn sich die beiden Datensätze mit gleicher ID in irgendeiner Spalte unterscheiden (im Beispiel beim Preis, möchte ich den kompletten Datensatz entweder irgendwie kennzeichnen oder in einer dritten Tabelle ablegen.
- Sonderfall: Wenn in Tabelle neu ein Datensatz mit einer ID enthalten ist, die nicht in Tabelle alt enthalten ist, möchte ich den kompletten Datensatz auch entweder irgendwie kennzeichnen oder in einer dritten Tabelle ablegen.
Hintergrund ist, dass ich auf einer Informix Datenbank in einer Tabelle Artikel-Datensätze vorliegen, die sich regelmäßig ändern, wo es aber keine Änderungshistorie gibt. Nun sollen aber auf täglicher Basis nur die Artikel mit allen spalten an eine externe Anwendung als csv-Datei geschickt werden, die sich in irgendeiner Spalte geändert haben. Auf der Informix Datenbank kann und darf ich nicht arbeiten. Deshalb sollen die Daten auf dem MS SQL Server 2008 R2 bearbeitet und aufbereitet werden.
Kann mir jemand einen Hinweis geben, wie ich nur geänderte Datensätze durch Vergleich zweier Tabellen erkennen kann? Gibt es hierfür eine elegante Lösung oder muss ich für jeden Datensatz aus Tabelle neu in Tabelle alt suchen und dann alle Spalten nacheinander miteinander vergleichen?
Gruß
Mika
Antworten
-
Das ist recht einfach mit EXCEPT möglich:EXCEPT and INTERSECT
-- Alles, was nur in TabelleA ist SELECT Wert FROM TabelleA EXCEPT SELECT Wert FROM TabelleB;
Das Ergebnis kannst Du dann wie auch sonst mit SELECT INTO oder INSERT SELECT in eine andere Tabelle überführen.Andreas Wolter | Microsoft Certified Master SQL Server
Blog: www.insidesql.org/blogs/andreaswolter
Web: www.andreas-wolter.com | www.SarpedonQualityLab.com- Als Antwort vorgeschlagen Wippenberg Dienstag, 19. November 2013 11:48
- Als Antwort markiert Ionut DumaModerator Freitag, 4. April 2014 12:38
Alle Antworten
-
Das ist recht einfach mit EXCEPT möglich:EXCEPT and INTERSECT
-- Alles, was nur in TabelleA ist SELECT Wert FROM TabelleA EXCEPT SELECT Wert FROM TabelleB;
Das Ergebnis kannst Du dann wie auch sonst mit SELECT INTO oder INSERT SELECT in eine andere Tabelle überführen.Andreas Wolter | Microsoft Certified Master SQL Server
Blog: www.insidesql.org/blogs/andreaswolter
Web: www.andreas-wolter.com | www.SarpedonQualityLab.com- Als Antwort vorgeschlagen Wippenberg Dienstag, 19. November 2013 11:48
- Als Antwort markiert Ionut DumaModerator Freitag, 4. April 2014 12:38