Heim >Datenbank >MySQL-Tutorial >Wie kann ich eine CASE-Anweisung in einer SQL-WHERE-Klausel für die bedingte Filterung verwenden?

Wie kann ich eine CASE-Anweisung in einer SQL-WHERE-Klausel für die bedingte Filterung verwenden?

Barbara Streisand
Barbara StreisandOriginal
2025-01-10 06:20:41282Durchsuche

How Can I Use a CASE Statement in a SQL WHERE Clause for Conditional Filtering?

Switch/Case-Anweisung der WHERE-Klausel in SQL

Abfrageanweisung:

Die folgende Abfrage versucht, die CASE-Anweisung in der WHERE-Klausel zu verwenden, um basierend auf den Werten von @locationType und @locationID zu filtern:

<code class="language-sql">declare @locationType varchar(50);
declare @locationID int;

SELECT column1, column2
FROM viewWhatever
WHERE
CASE @locationType
    WHEN 'location' THEN account_location = @locationID
    WHEN 'area' THEN xxx_location_area = @locationID
    WHEN 'division' THEN xxx_location_division = @locationID
END;</code>

Fehler:

Diese Abfrage führt zu einem Syntaxfehler, da der CASE-Ausdruck einen einzelnen Rückgabewert erwartet. Verschiedene WHEN-Klauseln enthielten fälschlicherweise einen Gleichheitsvergleich (= @locationID), der kein CASE-Ausdruck war.

Lösung:

Die korrekte Syntax für die Verwendung einer CASE-Anweisung in einer WHERE-Klausel besteht darin, den Ausdruck der Zielspalte zuzuweisen:

<code class="language-sql">declare @locationType varchar(50);
declare @locationID int;

SELECT column1, column2
FROM viewWhatever
WHERE
@locationID = 
  CASE @locationType
      WHEN 'location' THEN account_location
      WHEN 'area' THEN xxx_location_area
      WHEN 'division' THEN xxx_location_division
  END;</code>

In dieser modifizierten Abfrage gibt der CASE-Ausdruck die entsprechende Standortkennung basierend auf dem Wert von @locationType zurück. Die WHERE-Klausel vergleicht diesen Wert dann mit @locationID, um die Ergebnisse wie erwartet zu filtern.

Das obige ist der detaillierte Inhalt vonWie kann ich eine CASE-Anweisung in einer SQL-WHERE-Klausel für die bedingte Filterung verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn