# Abfrage abhängig von den Werten die ich erhalte.



## dercheffe (4. Dez 2006)

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. 

```
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:


```
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? 


```
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 (4. Dez 2006)

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:


```
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:


```
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 (4. Dez 2006)

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.


```
if(wert1 != null){query.append("tabelle2." + wert1 + " = tabelle1." + wert1)}
```


----------



## dercheffe (5. Dez 2006)

Danke für die Ideen, ich denke ich werde das mit Maske mal probiern


----------

