moin,
Das hat wirklich edelst funktioniert!
dafür sind wir hier da, sich gegenseitig zu helfen. aber dank nimmt man auch immer gerne entgegen, das ist quasi unsere droge.
Darf ich Dich weiter fragen? ;-)
ab hier muss ich eine beratungspauschale in höhe eines biers zur auslieferung in hamburg nehmen....
Was hältst Du von meinem Vorschlag für das Problem?
dein ansatz ist gar nicht so schlecht, aber birgt auch risiken. SQL ist als es entwickelt wurde ganz bewußt an der natürlichen, englischen sprache angelehnt. das hat den vorteil, dass man fragestellung, bzw. anforderungen lesen und dann in SQL übersetzen kann. das klappt natürlich nicht 1:1, aber so weit davon weg ist es auch nicht. klar ist erfahrung dabei auch sehr wichtig. also wenden wir uns noch mal deiner anforderung zu: "mir die Artikel aus -> einer <- Tabelle anzeigen zu lassen, die in der anderen Tabelle nicht enthalten sind."
man muss sehr genau lesen, du willst die artikel aus einer tabelle angezeigt haben, die ein bestimmtes kriterium erfüllen. was du eigentlich nicht willst, sind zwei tabellen miteinander zu verbinden, auch nicht mit einem OUTER JOIN. und das führt mich zu einem grundsatz: JOINS sind "böse". natürlich sind sie das nicht immer, aber es ist ein leitsatz und man tut gut daran, sich an ihm zu orientieren. warum das so ist, erkläre ich dir an deinem beispiel.
tabellen stehen oftmals in einem 1:n verhältnis zueinander, nicht immer, aber sehr oft. dadurch wird die ergebnismenge beeinflusst, sprich die anzahl der datensätze wird bei einem JOIN größer, die aus einer abfrage zurück gegeben werden. das muss nicht immer fall sein und in deinem beispiel bekommst du sogar die richtige anzahl der datensätze, weil du auf IS NULL prüfst. insofern könnte man denken, alles ist ok. aber ich würde es als schlechten stil bezeichnen. will ich nur datensätze aus einer tabelle, dann mache ich keinen join, sondern wieder eine korrelierte unterabfrage. was ich meine wird klarer, wenn du deine anforderung ein wenig abänderst in dem sinne, dass du datensätze haben willst, die auch in der anderen tabelle vorkommen. man könnte dann versucht sein einfach auf IS NOT NULL zu prüfen, bzw. einen INNER JOIN zu machen. und schon ist das dilema gross, zumal das einem auch nicht sofort ins auge fällt. aber die anzahl der datensätze kann nun falsch sein. sprich eine unterabfrage ist einfacher besser, damit bekommt man nie probleme mit der anzahl der datensätze.
(ich versuche mal, es in Worte zu fassen)
worte sind besser als SQL abfragen, noch besser sind immer beispieldaten
Suche mir aus jedem Datensatz der Tabelle 1 den Wert der Spalte XYZ und trage sie in den Datensatz der Tabelle 2 in Spalte XYZ2 ein, wo Tabelle1.Spalte1 = Tabelle2.Spalte1 ist UND Tabelle1.Spalte2 = Tabelle2.Spalte2 ist UND Tabelle1.Spalte3 = Tabelle2.Spalte3 ist.
im grunde genommen genauso wie der SELECT, nur eben als UPDATE.
UPDATE tabelle2 t2
SET t2.XYZ2 = (SELECT XYZ
FROM tabelle1 t1
WHERE t1.Spalte1 = t2.Spalte1
AND t1.Spalte2 = t2.Spalte2
AND t1.Spalte3 = t2.Spalte3
)
;
die abfragen kann "knallen" und zwar genau dann, wenn es mehrere werte beim abgleich der drei spalten zurück geliefert werden. ist das der fall, muss man die dateninhalte noch mal genauer durchleuchten. knallt es nicht, bist du am ziel.
Ilja