Bedingungen im Where-Block einer Select-Abfrage

Alles, was MariaDB und MySQL betrifft, kann hier besprochen werden.

Bedingungen im Where-Block einer Select-Abfrage

Postby oBdA » 26. February 2007 14:41

Hallo zusammen!

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
oBdA
 
Posts: 14
Joined: 01. August 2006 16:07

Postby Mätes » 02. March 2007 13:42

ich hab irgendwann aufgegeben, es doch noch zu verstehen.
fand es nicht sehr gut erklärt, vielleicht geht es anderen anders.

hätte zwar gerne geholfen, aber vor lauter x, y, b, a, is null und xvar != irgendwas weiß ich nicht mehr, wo vorne und hinten ist.

gruß
ma
User avatar
Mätes
 
Posts: 142
Joined: 13. April 2006 09:34
Location: kölle

Postby oBdA » 02. March 2007 22:05

Erst einmal vielen Dank, dass Dus versucht hast.
Man hätte es vielleicht deutlicher beschreiben können... Sorry!
Habe inzwischen im MySQL Handbuch nachgelesen und mir eine Abfrage gebastelt (mit When-Then-Else Blöcken und ISNULL). Es kam auch zu keiner Fehlermeldung, allerdings wollte die Abfrage auch zu keinem Ergebnis kommen :D
Deshalb habe ich mir nochmal von neuem Gedanken gemacht und mein Problem auf eine andere Weise lösen können - die auch mit "normalen" Abfragen auskommt :)

Viele Grüße
oBdA
oBdA
 
Posts: 14
Joined: 01. August 2006 16:07

Postby KingCrunch » 02. March 2007 22:50

Möglicherweise auch die Datenbankstruktur überdenken :roll:
Nicht jeder Fehler ist ein Bug ...
KingCrunch
 
Posts: 1724
Joined: 26. November 2005 19:25


Return to MariaDB - MySQL

Who is online

Users browsing this forum: No registered users and 3 guests