Heim >Datenbank >MySQL-Tutorial >Kann ich eine CASE-Anweisung in einer JOIN-Bedingung verwenden?

Kann ich eine CASE-Anweisung in einer JOIN-Bedingung verwenden?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-20 07:31:09280Durchsuche

Can I Use a CASE Statement in a JOIN Condition?

Kann die CASE-Anweisung in JOIN-Bedingungen verwendet werden?

Beim Versuch, Tabellen basierend auf dem Wert einer Spalte in der Tabelle sys.allocation_units zu verknüpfen, erzeugt der folgende Code einen Syntaxfehler:

<code class="language-sql">SELECT  *
FROM sys.indexes i
JOIN sys.partitions p
    ON i.index_id = p.index_id 
JOIN sys.allocation_units a
    ON CASE
       WHEN a.type IN (1, 3)
           THEN a.container_id = p.hobt_id 
       WHEN a.type IN (2)
           THEN a.container_id = p.partition_id
       END </code>

Erklärung der Fehlerursache:

CASE-Ausdruck gibt einen einzelnen Wert zurück, keinen Gleichheitsausdruck. In diesem Beispiel muss das Ergebnis des CASE-Ausdrucks mit einer Konstante (z. B. 1) verglichen werden, um festzustellen, ob die Bedingung wahr ist.

Korrigierter Code:

<code class="language-sql">SELECT  * 
FROM sys.indexes i 
JOIN sys.partitions p 
    ON i.index_id = p.index_id  
JOIN sys.allocation_units a 
    ON CASE 
       WHEN a.type IN (1, 3) AND a.container_id = p.hobt_id THEN 1
       WHEN a.type IN (2) AND a.container_id = p.partition_id THEN 1
       ELSE 0
       END = 1</code>

Dieser Code vergleicht das Ergebnis des CASE-Ausdrucks mit 1 und gibt die Zeile zurück, in der die Bedingung wahr ist.

Das obige ist der detaillierte Inhalt vonKann ich eine CASE-Anweisung in einer JOIN-Bedingung 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