SQL zwei Tabelle auf Feldebene vergleichen

estre

Commander
Registriert
Dez. 2005
Beiträge
3.006
Hallo zusammen,

ich habe eine kleine Herausforderung im SQL-Umfeld, bei der Ihr mir sicherlich weiterhelfen könnt.

Angenommen es existieren folgende Tabellen:

Tabelle 1, Name: „Export_aktuell“: Datenexport von heute
Tabelle 2, Name: „Export_letzte_Woche“: Datenexport von vor einer Woche

Nun möchte ich die beiden Tabellen vergleichen und pro Spalte ausgeben wie viele Feldwerte sich im Vergleich zur Vorwoche geändert haben (nicht die konkreten Datensätze, sondern nur die Anzahl pro Spalte!).
D.h. man müsste sich z.B. überall wo es Änderungen gab eine 1 merken und am Ende alle Werte summieren (pro Spalte).

Habt Ihr eine Idee wie das funktioniert?

Vielen Dank!
 
Poste doch bitte ein entsprechendes Beispiel der Tabellen.
 
Gleich vorneweg: Bin kein SQL Experte.

Aber ich denke wenn du das vorliegende Problem mit SQL lösen willst wirds wahrscheinlich kompliziert. Denn wenn man etwas mit zwei Tabellen machen will braucht man einen JOIN aber der ist im vorliegenden Fall unlogisch. Besser wäre es wohl die Logik weg von SQL in das abfragende Programm zu verlegen. Eine große While-Schlaufe in der man immer jeweils 25 Datensätze aus beiden Tabellen in jeweils ein Array oder andere höhere Datenstruktur einliest, also z.b. so ähnlich:

WHILE(true)
$query1 = SELECT * FROM Export_aktuell LIMIT start_pos,end_pos (wobei beide Positionen z.B. 25 Datensätze umfassen)
$query2 = SELECT * FROM Export_letzte_Woche LIMIT start_pos,end_pos
if($query1 is FALSE)break;
if($query2 is FALSE)break;

...jetzt die Datensätze in Datenstrukturen des aufrufenden Programmes (z.B. ein Array,HashMap etc.) schreiben
...und die Vergleichslogik durchführen

CONTINUE loop

bitte im Manual der verwendeten Datenbank nachsehen wie die Verwendung von Startposition und Endposition bei LIMIT gehandhabt wird, denn möglicherweise sind start und end andersrum wie oben beschrieben oder es gilt

$query = SELECT * FROM table LIMIT start_pos,25
 
Zuletzt bearbeitet:
Hallo zusammen,
danke für die Beiträge!

@SystemException
Ich will dir ein Beispiel nennen:

Tabelle 1
Name;Vorname;Rechnungsnummer;Gerätenummer
Maier;Ronny;0814;42342
Schmitt;Kevin;0814;43342
Müller;Enrico;0815;99862
Schneider;Ringo;4568;452774

Tabelle 2 (eine Woche später)
Name;Vorname;Rechnungsnummer;Gerätenummer
Maier;Ronny;0814;42342
Schmitt;Kevin;0814;43342
Müller;Enrico;0815;99862
Schneider;Ringo;4568;452774
Schmitt;Kevin;0814;43344
Schneider;Ringo;4568;452778

Ergebnis
Summe Änderungen:
Spalte 1: 0
Spalte 2: 0
Spalte 3: 0
Spalte 4: 2

@refi89: Danke für die Mühe, ich möchte es aber ersteinmal mit SQL probieren, wenn das nicht klappt, komme ich auf dein Beispiel gerne zurück
 
Select (SELECT count(Tabelle1.Name) AS Name
FROM Tabelle1 LEFT OUTER JOIN
Tabelle2 ON Tabelle1.ID = Tabelle2.ID
WHERE (NOT (Tabelle1.Name = Tabelle2.Name))) AS Name
,
(SELECT count(Tabelle1.Vorname) AS Vorname
FROM Tabelle1 LEFT OUTER JOIN
Tabelle2 ON Tabelle1.ID = Tabelle2.ID
WHERE (NOT (Tabelle1.Vorname = Tabelle2.Vorname))) AS Vorname
,
usw.

Die Zeilen müssen aber Eindeutig sein (in meinen Beispiel "ID")
 
Zuletzt bearbeitet:
@Alkor35: besten Dank, das sieht doch sehr gut aus!
 
Zurück
Oben