Ich möchte eine etwas komplexere MySQL-Abfrage bauen und komme aber leider nicht weiter. Deshalb hoffe ich, dass mir jemand von euch weiterhelfen kann. Nun aber zum Problem:
Ich möchte aus der Tabelle tab1 eine Reihe von Datensätzen auslesen, welche mehrere Bedingungen erfüllen:
select ... from tab1 where ...
Dabei möchte ich in den Where-Block eine Bedingung einfügen, welche folgendes leistet:
In tab1 gibt es die Felder a und b, wobei b NULL sein kann.
Wenn b nicht NULL ist soll in der Tabelle tab2 das Feld x mittels where tab2.a=tab1.a und tab2.b=tab1.b ausgelesen werden (man bekommt garantiert einen Datensatz als Ergebnis) und dieses mit der Variablen x_var in dem Where-Block der eigentlichen Select-Anfrage auf Gleichheit überprüft werden.
Wenn b NULL ist soll falls a in tab2 vorhanden ist das Feld y in tab2 ausgelesen werden (wobei a mehrmals in tab2 vorkommen kann; das Feld y ist aber für das gleiche a immer gleich, wodurch nur ein Datensatz ausgelesen werden muss). Falls a in tab2 vorhanden war und man somit y hat soll nun mit y und für b=1 x aus tab2 ermittelt werden (wobei auch hier garantiert nur ein Datensatz als Ergebnis geliefert wird). Dieses x soll dann im eigentlichen Where-Block wieder mit x_var auf Gleichheit überprüft werden. Wenn man y nicht erhalten konnte soll keine weitere Bedingung zum eigentlichen Where-Block der Select-Anfrage hinzugefügt werden (siehe Pseudo-Code weiter unten).
Ich hoffe das Problem ist verständlich dargestellt.
Für das Problem sind also in tab1 die Felder a, b und in tab2 die Felder a, b, x, y relevant.
Ich versuche es mittels Pseudo-Code nochmal etwas deutlicher zu machen:
- Code: Select all
select ... from tab1 where ... and x_var=
(if (b!=NULL) {
ergebnis von (select x from tab2 where tab2.a=tab1.a and tab2.b=tab2.a
}
else {
if (ergebnis von (select y from tab2 where tab2.a=tab1.a limit 1) existiert) {
y_var = ergebnis von (select y from tab2 where tab2.a=tab1.a limit 1);
ergebnis von (select x from tab2 where tab2.y=y_var and tab2.b=1
}
else {
x_var
}
})
Wenn jemand diesen Pseudocode in MySQL-Syntax umsetzen könnte wäre mir also eigentlich schon geholfen...
Hoffe es kann mir jemand helfen
Viele Grüße
oBdA