Heim > Datenbank > MySQL-Tutorial > Können CASE-Anweisungen direkt in JOIN-Bedingungen in SQL Server verwendet werden?

Können CASE-Anweisungen direkt in JOIN-Bedingungen in SQL Server verwendet werden?

Patricia Arquette
Freigeben: 2025-01-20 07:36:08
Original
799 Leute haben es durchsucht

Can CASE Statements Be Used Directly in JOIN Conditions in SQL Server?

SQL Server JOIN-Bedingungen und CASE-Anweisungen: Ein genauerer Blick

Beim Arbeiten mit den Systemansichten von Microsoft SQL Server 2008 R2, wie sys.partitions und sys.allocation_units, hängt die Beziehung zwischen ihnen oft vom sys.allocation_units.type-Wert ab. Ein üblicher Ansatz zum Verknüpfen dieser Tabellen könnte eine CASE-Anweisung innerhalb der JOIN-Bedingung beinhalten.

Sehen wir uns dieses Szenario an: Das Verbinden von sys.indexes, sys.partitions und sys.allocation_units erfordert eine bedingte Verknüpfung basierend auf allocation_units.type. Ein erster Versuch könnte so aussehen:

<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>
Nach dem Login kopieren

Dies führt jedoch zu einem Syntaxfehler. Das Problem ergibt sich aus der Tatsache, dass CASE-Anweisungen in SQL Server Skalarwerte und keine ausführbaren Anweisungen erzeugen. Sie können den Gleichheitsvergleich innerhalb der JOIN-Klausel nicht direkt steuern.

Die Lösung: Boolesche Auswertung mit CASE

Um dieses Problem zu lösen, müssen wir die CASE-Anweisung umstrukturieren, um einen booleschen Wert (1 für wahr, 0 für falsch) zurückzugeben, der dann verglichen werden kann:

<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>
Nach dem Login kopieren

Durch die Verwendung von AND innerhalb der WHEN-Klauseln und den Vergleich des resultierenden CASE-Ausdrucks mit 1 erstellen wir effektiv eine bedingte Verknüpfung. Dies zeigt, dass CASE-Anweisungen zwar leistungsstark sind, ihre Verwendung innerhalb von JOIN-Bedingungen jedoch eine sorgfältige Überlegung ihres Rückgabetyps und die Notwendigkeit einer expliziten booleschen Auswertung erfordert. Eine direkte Zuweisung oder Gleichheitsprüfung innerhalb der CASE-Anweisung selbst innerhalb eines JOIN wird nicht unterstützt.

Das obige ist der detaillierte Inhalt vonKönnen CASE-Anweisungen direkt in JOIN-Bedingungen in SQL Server verwendet werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage