case in where-teil mit liste

prestelino

Benutzer
Beiträge
7
Hallo zusammen,

ich habe folgendes Problem: ich würde meine Abfrage im 'where'-Teil gerne auf ein Feld mit einem case reagieren. Die Eingabe kommt über eine Variable und die Ausgabe kann ein Wert (=die Variable) oder eine Liste mit allen Werten (falls Variable leer) sein. Ich erhalte aber folgende Fehlermeldung:
"Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression. (SQL-21000)"

Hier mein SQL:
select a.nummer as KontrollID, g.refnummer as OrigID
from tblWaren a
left join tblGrundlagen g on g.id = a.id
where g.beschreibung like '%zange%'
and a.warenid in (
case when isnull(variable,1) = 0 then variable
else (select id from tblListe)
end)
order by a.nummer

Kann mir jemand helfen, was der Fehler ist? Ich habe ja ein a.warenid in... damit er ne Liste annehmen kann. Oder funktioniert das mit dem case hier so nicht?


Danke vorab vom prestelino
 
Werbung:
CASE im WHERE-Teil ist nicht zulässig und auch völlig unnötig, der WHERE-Teil arbeitet ja schon mit Gleichungen.
Code:
select a.nummer as KontrollID, g.refnummer as OrigID
from tblWaren a
left join tblGrundlagen g on g.id = a.id
where g.beschreibung like '%zange%'
AND (
isnull(variable,1) = 0 AND a.warenid = variable
OR
isnull(variable,1) > 0 AND a.warenid IN (select id from tblListe)
)
order by a.nummer
 
Werbung:
Das sind ja einfach nur Bedingungen, Wahr oder Falsch. Funktionen können im WHERE-Teil beliebig statt finden, Sub-Querys auch. Du kannst auch CASE in ein Sub-Query basteln aber die Logik die du brauchst ist mit AND und OR abbildbar. CASE hat man für den SELECT-Teil geschaffen weil da eben kein AND und OR gehen.
 
Zurück
Oben