Einzelnen Beitrag anzeigen

mjenke

Registriert seit: 28. Mär 2003
Ort: Bonn
131 Beiträge
 
#1

If-Verzweigungen in SQL-Queries?

  Alt 19. Jun 2006, 07:52
Datenbank: MySQL • Version: 3.23.55 • Zugriff über: ODBC
Guten Morgen, alle miteinander!


Folgendes Problem stellt sich mir:

Ich habe eine Datenbank, in der unter anderem Gesetze und Normenketten in zwei Tabellen liegen (tgesetze, tnormen).
Diese Normen und die Gesetze sind über IDs miteinander verknüpft:


tgesetze
--------
ID - Schlüssel des Gesetzes
THESNR - Thesaurusnummer die auch zur Sortierung herangezogen wird
GESETZ - Name des Gesetzes (z. B. EStG 1997, LStR 1996 etc.)

tnormen
-------
IDGESETZ - Fremdschlüssel. Ist die ID aus tgesetze
THESNR - Thesaurusnummer. KANN besetzt sein (ist sie leer, ist sie nicht NULL, sondern -1).


Jetzt muss ich eine Liste von Normen aus der Datenbank ziehen, die nach der Thesaurusnummer (und damit indirekt auch nach dem Gesetzesnamen aus tgesetze) sortiert ist. Dabei gilt aber folgende Regel:
  • Wenn in tnormen KEINE THESNR angegeben ist, soll die Verbindung zu tgesetze über IDGESETZ hergestellt werden.
  • Wenn allerdings eine THESNR in tnormen ANGEGEBEN ist, muss die Verbindung zu tgesetze über diese THESNR hergestellt werden. Diese THESNR ist eine nachträglich manuell hergestellte Verbindung von der Norm zum Gesetz, die in jedem Fall Vorrang hat.

Meine Frage ist nun:

Wie kann ich in EINER einzigen Query eine Abfrage so gestalten, dass entschieden wird, über welches Feld aus tnormen (IDGESETZ oder THESNR) nun die Verbindung zu tgesetze hergestellt wird? Oder ist dies gar nicht möglich und ich muss mir einen ganz anderen Weg überlegen?

So nach dem Motto:

SQL-Code:
SELECT t1.*, t2.gesetz FROM
tnormen t1
if t1.THESNR <> -1 then LEFT JOIN tgesetze t2 ON t1.THESNR = t2.THESNR
else LEFT JOIN tgesetze t2 ON t1.IDGESETZ = t2.ID
ORDER BY ...

An der Struktur der Datenbank kann ich hier nichts ändern, da dies vom Kunden so vorgegeben wurde. Ich muss nur einen Weg finden, mich da durchzuboxen.


Falls jemand eine Möglichkeit weiss, wie ich das bewerkstelligen könnte, wäre ich echt dankbar. Es brennt mir nämlich ein bisschen auf den Nägeln, da ich heute morgen erst drangehen konnte, aber auch heute fertig werden muss.



Matthias
Matthias Jenke
  Mit Zitat antworten Zitat