Tom2 (der authentifizierte): Platzhalter in SQL-Statement / Java

Beitrag lesen

Hi

Hat jemand grundsätzlich eine Idee, was ich vielleicht auch in Bezug auf die Tabellennamen eleganter machen könnte?

Also die Tabellennamen finde ich gut, da sie selbsterklärend sind. Jedoch sind sie etwas gar lang, wesshalb man z.B. auf Präfixe setzen könnte (-> vThemenFehlercodes). Ich benenne Verknüpfungstabellen immer nach den beiden Tabellen, die sie verbinden (-> ThemenFehlercodes), jedoch nur weil mir noch keine bessere Möglichkeit eingefallen ist.

In Abfragen, die ab und zu auch von Menschen (sprich Entwicklern) gelesen werden sollen, finde ich Aliase ganz schön:

SELECT T.* FROM Themen T WHERE T.ID=42

Natürlich solltest du die Aliase immer so wählen, dass ersichtlich ist, was gemeint ist.

Nun zu deinem konkreten Problem. Welches DBMS verwendest du? Untersützt es Subselects? Ich weiss nicht ob die wirklich besser sind, jedoch wären sie eine testenswerte Alternative:

SELECT DISTINCT T.Deutsch, T.Englisch FROM Themen T
WHERE T.ThemenID IN
 (SELECT ThemenID FROM Verknuepfung_Themen_Fehlerauftrittszeitpunkte
  WHERE Fehlerauftrittszeitpunkte_ID=4)

So kannst du die Kriterien beliebig aneinander reihen.

Eine andere Alternative wäre JOINs zu verwenden:

SELECT DISTINCT T.Deutsch, T.Englisch FROM Themen T
  INNER JOIN Verknuepfung_Themen_Fehlerauftrittszeitpunkte F
    ON T.ThemenID=F.ThemenID
WHERE F.Fehlerauftrittszeitpunkte_ID=4

Dadurch wird das automatisierte Aneinanderreihen etwas komplizierter, da du den JOIN und die WHERE-Klausel anfügen musst.

All zu schwer sollte dies jedoch auch nicht sein. Ich würde ein (WHERE) bis zwei (JOIN) Arrays verwenden, die alle Möglichkeiten speichern und aus denen du dann, je nach gewähltem Kriterium, den Query zusammenstricken kannst.

Da die Tabellennamen aber so komplex sind weiß ich nicht, wie ich diese Abfrage in Java dynamisch erzeugen könnte. Daher dachte ich mir nun, sie einfach komplett zu lassen, und für die Zahlen in den nicht relevanten Vergleichen eine Art Wildcard einzusetzen.

Ich befürchte, dass dies die am wenigsten performante Methode sein wird.

Gruss

Tom2