Lieber Maximilan, ich bin geplättet. Das funktioniert!
Und es hat ein bisschen gedauert, bis ich kapiert habe, wie du das
hingekriegt hast.
Der Witz ist wohl, dass die SELECT-Unterabfrage eine Tabelle referenzieren
kann, die nur in der einschließenden Abfrage aufgerufen wird. Auf diese
Weise kann man Bedingungen für mehrere Felder der Tabelle in der
einschließenden Abfrage stellen. Das war ja mein Problem.
Die DISTINCT-Anweisung ist übrigens wohl nur dann erforderlich, wenn in Tab1
mehrfache Wert enthalten sein können.
Darüber hinaus gibt es das Wunder des IN-Prädikats. Wenn ich weiß, dass ich
hier mit dem IN-Prädikat in einer referenzierenden Unterabfrage weiterkomme,
dann finde ich das auch in meinem SQL-Buch. Der Syntax alleine ist aber
nicht anzusehen, dass die Unterabfrage immer nur einen Wert liefert, die
einschließende Befehl diese Abfrage für jeden Datensatz seiner Tabelle
durchführt und man hier also das gleiche Prinzip vorfindet, wie bei einer
JOIN-Abfrage.
besten Dank und besten Gruß, Christian Hahn.
----- Original Message -----
From: "Maximilian Tyrtania" <[email protected]>
To: <[email protected]>
Sent: Monday, May 04, 2009 10:17 AM
Subject: Re: SQL Update-Problem
Hi Christian,
Versuch mal:
UPDATE Tab2 SET Gesperrt = 'x'
WHERE Tab2.Datum IN
(SELECT DISTINCT(Tab1.datum) FROM Tab1 where Tab1.Gesperrt LIKE '%' ||
Tab2.Std || '%')
Ciao,
Maximilian Tyrtania
am 03.05.2009 12:04 Uhr schrieb Christian Hahn unter
[email protected]:
Hallo,
Wie kann ich in einem UPDATE-Befehl auf mehr als 1 Kriterium prüfen, wenn
ich in der WHERE-Klausel eine Unterabfrage benutze?
Die Abfrage, die ich als Unterabfrage benutzen wird, lautet:
SELECT * FROM Tab2 INNER JOIN Tab1
ON Tab2.Datum = Tab1.Datum AND Tab1.Gesperrt LIKE '%' || Tab2.Std || '%'
Der UPDATE-Befehl müsste etwa lauten:
UPDATE Tab2 SET Gesperrt = 'x'
WHERE Tab2.Std =
(SELECT * FROM Tab2 INNER JOIN Tab1
ON Tab2.Datum = Tab1.Datum AND Tab1.Gesperrt LIKE '%' || Tab2.Std ||
'%')
hier fehlt in der WHERE-Klausel aber noch die Überprüfung von Datum.
Aber folgendes funktioniert nicht:
UPDATE Tab2 SET Gesperrt = 'x'
WHERE Tab2.Std =
(SELECT * FROM Tab2 INNER JOIN Tab1
ON Tab2.Datum = Tab1.Datum AND Tab1.Gesperrt LIKE '%' || Tab2.Std ||
'%')
AND Tab2.Datum =
(SELECT * FROM Tab2 INNER JOIN Tab1
ON Tab2.Datum = Tab1.Datum AND Tab1.Gesperrt LIKE '%' || Tab2.Std ||
'%')
Wie gehts richtig?
Ich hoffe, das Problem ist so schon genügend durchschaubar, ich kann's
aber
auch noch genauer erläutern.
besten Dank für Rat und Hilfe, Christian Hahn.