select ob was nicht da is ...
Korbinian Bachl
- datenbank
Hi Forum,
habe folgendes problem:
ich möchte rausfinden ob etwas in 2 tabellen nicht jeweils vorhanden ist ->
newslistenew , newslisteold -> je columns bestnr, preis -> wenn nun eines von beiden abweicht soll er mir das ausspucken aber er macht das nur wenn beide gleich sind...
versteht ihr ?
select * from newslistenew, newslisteold where newslistenew.bestnr, newslistenew.dm != newslisteold.besntr, newslisteold.dm;
leider klappt das nicht....
sinn der sache ist es herauszufinden ob und was in 12 speziellen tabellen geändert wurde... ohne dabei die 12 tabellen anzupassen -> ich erstelle deswegen jeweils kopien und möchte nun herausfinden ob die alte kopie andere daten enthält als die neue kopie und dieses delta, also die änderung , die soll dann in eine neue tabelle rein... dummwerweise klappt das seit tagn nicht ...
hoffe auf hilfe
grüße
Korbinian
Hi,
select * from newslistenew, newslisteold where newslistenew.bestnr, newslistenew.dm != newslisteold.besntr, newslisteold.dm;
newslistenew.bestnr != newslisteold.bestnr AND newslistenew.dm != newslisteold.dm
Ggf. AND durch OR ersetzen, je nachdem was Du willst.
Cheatah
Hallo !
SCNR:
select * from newslistenew, newslisteold where newslistenew.bestnr, newslistenew.dm != newslisteold.besntr, newslisteold.dm;
newslistenew.bestnr != newslisteold.bestnr AND newslistenew.dm != newslisteold.dm
Ggf. AND durch OR ersetzen, je nachdem was Du willst.
Cheatah
Ich denke 'mal, das war ein schneller Schuß aus der Hüfte.
Mit derlei lustigen Verknüpfungen hat man ruckzuck verdammt viel Datenmüll fabriziert.
Gruß,
kerki
Hallo Korbinian!
versteht ihr ?
Sicher bin ich mir da nicht, ich versuch's mal :
Du speicherst eine Tabelle 'newslistenew' zu einem bestimmten Zeitpunkt als Kopie 'newslisteold' ab und möchtest zu einem späteren Zeitpunkt ermittelt, in welchen Datensätzen von 'newslistenew' Änderungen an den Feldern 'bestnr' oder 'dm' sich seit Erstellung der Kopie ergeben haben.
Ich hoffe so war es gemeint.
Dazu zunächst folgendes:
Klappen wird das Ganze nur, wenn wenigstens noch ein anderes _eindeutiges_ Feld in der Tabelle vorhanden ist, das einen Bezug zwischen den neuen und der alten Version der Tabelle herstellt.
Ansonsten wird es nicht gelingen, bei einem Vergleich 'neuer Datensatz' != 'alter Datensatz' festzustellen, ob hier 1 Datensatz verändert wurde, oder ob die 2 schon vorher unterschiedlich waren.
In deinem speziellen Fall könnte 'bestnr' so ein Feld sein, vorausgesetzt, dass es gar nicht verändert, sondern nur hinzugefügt werden kann. Dann könnte deine Abfrage so aussehen:
----------------------------------------------------
SELECT newslistenew.*
FROM newslistenew
LEFT JOIN newslisteold USING (bestnr)
WHERE newslistenew.dm != newslisteold.dm
OR newslisteold.bestnr IS NULL
----------------------------------------------------
Wenn aber auch 'bestnr' verändert werden kann, müsste die Abfrage so lauten:
----------------------------------------------------
SELECT newslistenew.*
FROM newslistenew
LEFT JOIN newslisteold USING (id)
WHERE newslistenew.bestnr != newslisteold.bestnr
OR newslistenew.dm != newslisteold.dm
OR newslisteold.id IS NULL
----------------------------------------------------
wobei dann 'id' ein solches eindeutiges Feld sein müsste, dass bei beiden Tabellen gleich ist.
Wenn sich solch ein Feld nicht finden lässt, sehe ich keine Lösung für dein Problem. (was nicht heißen muss, dass es keine gibt ;-) )
Als Literatur empfehle ich hierzu :
http://www2.rent-a-database.de/mysql/mysql.html im Allgemeinen und
http://www2.rent-a-database.de/mysql/mysql-118.html, was dein spezielles Problem anbetraf.
Die verwendete Syntax ist MySQL und getestet habe ich es mit Version 3.21.29a. Für andere Syntax übernehme ich keine Garantie (und für Tippfehler auch nicht ;-) )
Ich hoffe, das war, was du gesucht hast.
Gruß,
kerki
Ich hoffe, das war, was du gesucht hast.
Gruß,
kerki
Ja genau !! das wars... könnte dich Küssen :))))
habe das ganze auf 3 anfragen verteilt um 1. herauszufinden was neu is -> artikel added
2. nimmer da is -> artikel deleted
3. wo preis billiger is -> price changed an pricenew < priceold
die ausgabe meines scriptes (phph) macht da genau das wass ich will :))
SELECT newslistenew.* FROM newslistenew LEFT JOIN newslisteold USING (bestnr) WHERE newslisteold.bestnr IS NULL
NEU
MT-9999
SELECT newslisteold.* FROM newslisteold LEFT JOIN newslistenew USING (bestnr) WHERE newslistenew.bestnr IS NULL
Gelöscht
MT-9998
SELECT newslistenew.* FROM newslistenew LEFT JOIN newslisteold USING (bestnr) WHERE newslistenew.dm != newslisteold.dm AND newslistenew.dm < newslisteold.dm
Preis Billiger
MT-added
MT-deleted
MT-billig80
... jetzt wirds dann nur noch in ne newstabelle geschrieben und mit ner flag versehen was geändert war und noch mit zusätzlihen infos versehen..
also, danke nochmal...
grüße
Korbinian
www.whiskyworld.de
(erscheint in kürze in neuem glanz)