![]() |
Datenbank: MySQL • Version: 3.23.55 • Zugriff über: ODBC
If-Verzweigungen in SQL-Queries?
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:
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 |
Re: If-Verzweigungen in SQL-Queries?
das Zauberwort heisst decode.
decode(expr[,search,result][,default]) es können beliebige [,search,result]-Paare angeben. Entspricht expr einem der searches in dieser Liste, so wird der korrespondierende result angenommen, wenn keiner passt, dann der defaultwert. beispiel:
Delphi-Quellcode:
wegen syntaxc mussu evtl nochmal gucken.
decode(deptno,10,'ACCOUNTING',20,'RESEARCH','NONE')
|
Re: If-Verzweigungen in SQL-Queries?
Hallo,
Zitat:
SQL-Code:
Bin nicht sicher ob das so 100%ig in Mysql funktioniert.
(SELECT t1.*, t2.gesetz
FROM tnormen t1, gesetz t2 WHERE t1.THESNR = t2.THESNR AND t1.THESNR <> -1) UNION (SELECT t1.*, t2.gesetz FROM tnormen t1, gesetz t2 WHERE t1.THESNR = -1 AND t1.IDGESETZ = t2.ID) ORDER BY ... Wie gesagt ungetestet, nicht optimiert etc. aber vielleicht als Anregung. HTH Markus |
Re: If-Verzweigungen in SQL-Queries?
@Sidorion:
Zitat:
@Markus:
SQL-Code:
Die Idee fand ich klasse, aber MySQL 3.23.55 unterstützt noch kein "union". Das kommt erst ab der 4er-Version. Und die Version darf ich leider nicht ändern.
(SELECT t1.*, t2.gesetz
FROM tnormen t1, gesetz t2 WHERE t1.THESNR = t2.THESNR AND t1.THESNR <> -1) UNION (SELECT t1.*, t2.gesetz FROM tnormen t1, gesetz t2 WHERE t1.THESNR = -1 AND t1.IDGESETZ = t2.ID) ORDER BY ... Aber vielleicht kann ich eine temporäre Tabelle anlegen, die Queries - wie in dem Union-Beispiel - nacheinander ausführen und die Ergebnismengen in die temporäre Tabelle schreiben, um dann auf die hier vorhandenen (bereinigten) Datensätze eine dritte Query abzusetzen und die temporäre Datei wieder zu entfernen. :-D Matthias |
Re: If-Verzweigungen in SQL-Queries?
Zitat:
|
Re: If-Verzweigungen in SQL-Queries?
Das mit if und else geht erst ab Version 5.0 also musst du das wohl mit deinem Prog machen,
|
Re: If-Verzweigungen in SQL-Queries?
Und was spricht gegen...
SQL-Code:
[vergiss es, habe oben nochmal gelesen]
SELECT t1.*, CASE WHEN t1.THESNR <> -1
THEN t2a.gesetz ELSE t2b.gesetz END gesetz FROM tnormen t1 LEFT JOIN tgesetze t2a ON t1.THESNR = t2a.THESNR LEFT JOIN tgesetze t2b ON t1.IDGESETZ = t2b.ID ORDER BY ... Das mit der -1 finde ich allerdings nicht so elegant. Muss das so sein? Warum nicht NULL für diesen Fall! [/vergiss es, habe oben nochmal gelesen] MfG Thorsten |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:08 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz