Rumah >pangkalan data >tutorial mysql >Bolehkah Penyata KES Digunakan Secara Terus dalam Keadaan JOIN dalam SQL Server?

Bolehkah Penyata KES Digunakan Secara Terus dalam Keadaan JOIN dalam SQL Server?

Patricia Arquette
Patricia Arquetteasal
2025-01-20 07:36:08840semak imbas

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

SQL Server JOIN Syarat dan Penyata KES: Pandangan Lebih Dekat

Apabila bekerja dengan paparan sistem Microsoft SQL Server 2008 R2, seperti sys.partitions dan sys.allocation_units, hubungan antara mereka selalunya bergantung pada nilai sys.allocation_units.type. Pendekatan biasa untuk menyertai jadual ini mungkin melibatkan pernyataan CASE dalam keadaan JOIN.

Mari kita periksa senario ini: Menyambung sys.indexes, sys.partitions dan sys.allocation_units memerlukan gabungan bersyarat berdasarkan allocation_units.type. Percubaan awal mungkin kelihatan seperti ini:

<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>

Ini, bagaimanapun, mengakibatkan ralat sintaks. Isu ini berpunca daripada fakta bahawa CASE pernyataan dalam SQL Server menghasilkan nilai skalar, bukan pernyataan boleh laku. Mereka tidak boleh mengawal perbandingan kesaksamaan secara langsung dalam klausa JOIN.

Penyelesaian: Penilaian Boolean dengan KES

Untuk menyelesaikan masalah ini, kita perlu menyusun semula pernyataan CASE untuk mengembalikan nilai Boolean (1 untuk benar, 0 untuk palsu) yang kemudiannya boleh dibandingkan:

<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>

Dengan menggunakan AND dalam klausa WHEN dan membandingkan ungkapan CASE yang terhasil kepada 1, kami mencipta gabungan bersyarat dengan berkesan. Ini menunjukkan bahawa walaupun penyataan CASE berkuasa, penggunaannya dalam keadaan JOIN memerlukan pertimbangan yang teliti terhadap jenis pemulangannya dan keperluan untuk penilaian Boolean yang jelas. Tugasan langsung atau ujian kesaksamaan dalam CASE pernyataan itu sendiri dalam JOIN tidak disokong.

Atas ialah kandungan terperinci Bolehkah Penyata KES Digunakan Secara Terus dalam Keadaan JOIN dalam SQL Server?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn