2 Tabellen vergleichen und Unterschiede ausgeben
Matzeeee
- datenbank
Einen schönen Abend wünsche ich euch!
Ich suche zur Zeit eine Möglichkeit Daten aus 2 verschiedenen Tabellen zu vergleichen und Unterschiede auszugeben.
Grund:
Shop Datenbank
Tabelle1 = Bestellungen
Tabelle2 = Sicherung der Bestellungen
Nun möchte ich in einem kleinen Tool anzeigen lassen, ob Daten unterschiedlich in den Tabellen stehen, da man doch ab und an Daten anpassen muss...
meine Ansätze:
SELECT
t1.order_id,
t1.address_firstname,
t1.address_lastname
FROM tbl1 AS t1
LEFT JOIN tbl2 AS t2
ON t2.order_id=t1.order_id
WHERE order_id=1
AND
t1.address_firstname <> t2.address_firstname
OR
t1.address_lastname <> t1.address_lastname
-> Gibt #1052 - Column 'order_id' in where clause is ambiguous aus, was ich nicht so ganz verstehe wieso..
zweiter Ansatz:
SELECT order_id, address_firstname, address_lastname
FROM tbl1
WHERE order_id=1
AND (order_id, address_firstname, address_lastname) NOT IN (SELECT order_id, address_firstname, address_lastname
FROM tbl2 WHERE order_id=1)
--> was haltet ihr davon? Ist aber irgendwie ziemlich langsam... und ich weis nicht ob das so richtig arbeitet wie es sollte
Wäre dankbar für Hilfe :) Grüße Mathias
moin,
-> Gibt #1052 - Column 'order_id' in where clause is ambiguous aus, was ich nicht so ganz verstehe wieso..
ich schon, sind denn wirklich alle spalten mit dem Tabellen präfix besetzt ?
--> was haltet ihr davon? Ist aber irgendwie ziemlich langsam... und ich weis nicht ob das so richtig arbeitet wie es sollte
gib uns mal sinnvolle beispieldaten und die gewünschte ergebnismenge....
Ilja
Danke für die Antwort,
ich schon, sind denn wirklich alle spalten mit dem Tabellen präfix besetzt ?
Ja, jeder Datensatz in der jeweiligen Tbl hat die order_id als eindeutige Zuweisung.
gib uns mal sinnvolle beispieldaten und die gewünschte ergebnismenge....
gewünschte Ergebnismenge ist natürlich NULL ;) aber falls zB in tbl1 der firstname anders ist, als der aus tbl2 soll spalte firstname ausgegeben werden.
Beispieldaten:
DB: shop
tabelle1 = aktuelleTabelle
spalte1 = order_id
spalte2 = vorname
spalte3 = nachname
tabelle2 = sicherungVonTabelle1
spalte1 = si_order_id
spalte2 = order_id
spalte3 = vorname
spalte4 = nachname
wenn nun der Vorname in Tabelle1 geändert wird soll er diese Unstimmigkeit ausgeben
Greez Matze
Hi,
ich schon, sind denn wirklich alle spalten mit dem Tabellen präfix besetzt ?
Ja, jeder Datensatz in der jeweiligen Tbl hat die order_id als eindeutige Zuweisung.
Es geht nicht um die Datensätze, sondern um die Angabe der Spalte in der Query.
WHERE order_id=1
Ja, welche ist denn da jetzt bloß gemeint - die aus Tabelle1, oder die aus Tabelle2 …?
Das hast du uns und deinem DBMS nicht gesagt – und deshalb beschwert sich letzteres zu Recht bei dir darüber.
MfG ChrisB
hi,
Shop Datenbank
Tabelle1 = Bestellungen
Tabelle2 = Sicherung der Bestellungen
Da hast Du die Daten dann redundant, muss nicht sein, anderer Vorschlag: Setze ggf. noch ein Feld ein, damit Du zwischen offenen und abgeschlossenen Bestellungen eine andere Ansicht erzeugen kannst. Erzeuge einen sinnvollen Index, damit die Abfragen auf die gewünschten Ansichten performant werden.
Hotti