2016-05-23 3 views
1

Für eine select-Anweisung wählen eingestellt I des in dem Zustand von außen in einer Konfigurationsdatei als Parameter einen Teil, wie folgt aus (COL2 mit String-Werten gefüllt ist):Wählen Sie in der Liste, wo sonst all die meisten elegant

SELECT COL1 
     ,COL2 
FROM TABLE1 
WHERE COL2 = $external_parameter 

Jetzt habe ich einen komplexeren Fall, wo ich den externen Parameter eine Liste sein muss. Immer wenn ein Wert von COL2 in der Liste ist, sollte er auswählen, wenn jedoch keine Liste oder irgendeine Art von "leerem" Tag angegeben wird, sollte jeder Wert erneut ausgewählt werden. Ich kam mit einer Idee, aber es funktioniert nicht auf diese Weise:

SELECT COL1 
     ,COL2 
FROM TABLE1 
WHERE $external_list = ('') or COL2 IN $external_list 

Wie dies würde die Aussage für alle Elemente COL2 wahr sein, wenn eine leere Liste vorgesehen ist, und gilt für jedes Element in der Liste das stimmt mit der Liste überein, wenn eine gefüllte Liste zur Verfügung gestellt wird.

Wenn ich jedoch eine gefüllte Liste zur Verfügung stellen wird es nicht in der ersten Hälfte des in dem Statements auf dem Vergleich zu arbeiten:

('entry_a', 'entry_b') = ('') 

Gibt es eine Abfrage, die es funktionieren würde - am besten in einer einer Zeile Wo Aussage?

+0

Alle Antworten zur Verfügung gestellt haben für meine nicht arbeiten, wie ich eine Liste als externe Parameter liefern , so kommt es immer zu '('entry_a', 'entry_b') = ''', was bei mir nicht zu funktionieren scheint. Muss ich die Liste im externen Parameter in einem anderen Format bereitstellen? – aldorado

+1

'WO '' IN $ external_list ODER COL2 IN $ external_list' – adrianm

+0

Dies ist die eleganteste Sache, die auf meinem Fall funktioniert, ich denke, ich werde es verwenden. Aber es deckt nicht den Fall ab, dass jemand versehentlich die Liste auf '('entry_a', 'entry_b', '')' setzt. Ich muss einen Check dafür finden. Aber es wird für mich funktionieren. – aldorado

Antwort

0

Versuchen Sie so etwas,

SELECT COL1 
    ,COL2 
FROM TABLE1 
WHERE COL2 IN ($EXTERNAL_PARAMETER) 
    OR 1 = (
     CASE 
      WHEN $EXTERNAL_PARAMETER = '' 
       THEN 1 
      ELSE 0 
      END 
     ) 
+0

Der Vergleich von $ EXTERNAL_PARAMETER, der ('entry_a', 'entry_b') mit einem String '' ist, funktioniert nicht. – aldorado

0

Versuchen Sie, diese Art und Weise

SELECT COL1 
    ,COL2 
FROM TABLE1 
WHERE COL2 IN (
      CASE 
      WHEN $EXTERNAL_PARAMETER = '' 
       THEN COL2 
      ELSE $EXTERNAL_PARAMETER 
      END) 
0

testen

IF $EXTERNAL_PARAMETER = '' 
SET $EXTERNAL_PARAMETER = NULL 

SELECT COL1 
    ,COL2 
FROM TABLE1 
WHERE COL2 = ISNULL($EXTERNAL_PARAMETER, COL2) 
Verwandte Themen