Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
T-SQL - WHERE Klausel mit CASE + Unterabfrage
Noodles
myCSharp.de - Experte



Dabei seit:
Beiträge: 4.644
Herkunft: Leipzig

Themenstarter:

T-SQL - WHERE Klausel mit CASE + Unterabfrage

beantworten | zitieren | melden

Hi,

ich habe eine WHERE Klausel, in der ich einen CASE Ausdruck verwende in dem ich wiederum gern eine Subquery ausführen möchte.
SELECT ....
WHERE ...
AND table.myIntColumn IN ( CASE @myVariable
	                        WHEN 0 THEN ( SELECT ID FROM MyOtherTable )
		               ELSE 4 
		         END )

Das funktioniert so nicht.
Zitat
Die Unterabfrage hat mehr als einen Wert zurückgegeben. Das ist nicht zulässig, wenn die Unterabfrage auf =, !=, <, ≤, > oder ≥ folgt oder als Ausdruck verwendet wird.
Wenn ich anstatt der Unterabfrage eine z.B. 3 eingeben läuft es. Gibt es überhaupt eine Möglichkeit in der Konstellation eine Unterabfrage auszuführen?

Gruß Noodles
private Nachricht | Beiträge des Benutzers
Yellow
myCSharp.de - Experte

Avatar #avatar-2347.png


Dabei seit:
Beiträge: 476

beantworten | zitieren | melden

hallo noodles,

ich hab's aus Interesse eben auch mal ausprobiert. Eine Unterabfrage in der Konstellation müsste schon möglich sein, denn wenn du deine Subquery über eine WHERE-Klausel einschränkst, so dass sie nur einen Wert zurückgibt, funktioniert es (genau wie die 3 anstatt der Subquery).

Es liegt also eher an der CASE-Anweisung, die Probleme hat, mehrere Werte zu verarbeiten. Was hier aber der Unterschied zu einer normalen Subquery ist, würde mich auch interessieren.

-yellow
Selbst ein Weg von tausend Meilen beginnt mit einem Schritt (chinesisches Sprichwort).

Mein Blog: Yellow's Blog auf sqlgut.de
private Nachricht | Beiträge des Benutzers
Noodles
myCSharp.de - Experte



Dabei seit:
Beiträge: 4.644
Herkunft: Leipzig

Themenstarter:

beantworten | zitieren | melden

Also case kann wohl immer nur einen Wert zurückgeben.
Ich habe mir nun vor der Query eine Temporäre Tabelle angelegt. Diese fülle ich anhand der Bedingungen.
CREATE TABLE #TempList ( column int )
IF @myVariable = 0
    INSERT INTO #TempList SELECT ID FROM MyTable
ELSE
    INSERT INTO #TempList ( column ) VALUES ( @myVariable )

Dann frage ich in der WHERE Klausel nur nich die Tabelle ab.
AND table.myIntColumn IN ( SELECT column FROM #TempList )
private Nachricht | Beiträge des Benutzers