Abfrage abhängig von den Werten die ich erhalte.

Status
Nicht offen für weitere Antworten.

dercheffe

Aktives Mitglied
Man stelle sich vor, ich habe ein Tabelle in einer DB. Diese Tabelle hat 4 Spalten. Aus diesen 4 Spalten sollen nun weitere Abfragen generiert werden.
Code:
select * from tabelle2 where tabelle2.wert1 = tabelle1.wert1 and tabelle2.wert2 = tabelle1.wert2 and ...

Alle Werte können null sein, ist dies der fall, so ist es kein Kriterum für die folgende Abfrage.
also wert 3 ist null, dann ist die abfrage:

Code:
select * from tabelle2 where tabelle2.wert1 = tabelle1.wert1 and tabelle2.wert2 = tabelle1.wert2 and tabelle2.wert4 = tabelle1.wert4

Ich weiß aber nicht wie ich das am geschicktesten lösen kann. Muss ich das komplett mit if abfragen machen?

Code:
wenn wert1=null{
    wenn wert2=null{
    //hier muss ich ja nochmals überprüfuen ob 3 und 4 null sind usw
    }
    wenn wert3=null
    }
    wenn wert4=null{
    }
    sonst{
    select * from tabelle2 where tabelle2.wert2 = tabelle1.wert2 and tabelle2.wert3 = tabelle1.wert3 and tabelle2.wert4 = tabelle1.wert4
    }
}
wenn wert2=null{

.....

das können sehr viele werden. Gibt es da nicht eine bessere Lösung? Die Programmiersprache in diesem Fall wird Perl, aber vieleicht kann ich da noch handeln.
Ideen?
Danke!
 

Lupo4u2

Mitglied
Ich hoffe ich habe dich jetzt richtig verstanden... Deine Abfrage schliesst immer alle Felder aus die 'null' sind, oder?

Hm, das könnte man mit einer Maske realisieren (sieht zwar gleich komisch aus, aber die logik sollte stimmen) :

Du gibst jeder deiner Spalten einen Wert:

Spalte 1 = 1;
Spalte 2 = 3;
Spalte 3 = 5;
Spalte 4 = 7;

Dann nimmst du eine Variable (wir nennen sie mal 'empty'), in der du alle 'null' Werte mit hilfe der oben genannten Werte zusammenzählst:

Code:
empty = 0; // kein Feld ist 'null' - bisher
Wenn Spalte 1 = null, dann wird empty um 1 erhöht (empty +=1);
Wenn Spalte 2 = null, dann wird empty um 3 erhöht (empty +=3);
Wenn Spalte 3...

Und so weiter... Am ende kann die Variable 'empty' 16 (4x4) verschiedene Werte haben. (Je nachdem welche Spalten null sind)
Jetzt kannst du einen Vergleich mit den Werten machen:

Code:
switch (empty)
{
case  0://kein Feld ist null
case  1:// Spalte 1 ist null
case 12:// Spalte 3 (empty +=5) & Spalte 4 (empty +=7) sind leer
case 16://alle Spalten sind leer...
usw...

}

Wie gesagt, das sieht jetzt ein bisschen merkwürdig aus, aber auf diese Art und Weise müsstest du halt nicht tausend if then else Abfragen machen, sondern rechnest einfach immer nur ein bisschen und lässt es ansonsten in einer Schleife laufen... Oder so ähnlich, weiss ja nicht was genau du mit den Abfragen vorhast ;)

Gruß
 

WieselAc

Top Contributor
alternative könntest du aber den Abfrage String auch zusammen bauen.

Hier mal als beispiel für wert1. Wenn du das über ne methode machst geht es sogar noch einfacher. Musst dann nur prüfen ob da eine "verbindung" zwischen kommt oder nicht. Aber das sollte ja leicht gehen.

Code:
if(wert1 != null){query.append("tabelle2." + wert1 + " = tabelle1." + wert1)}
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben