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

Bolehkah Penyata KES Digunakan dalam Keadaan JOIN dalam SQL Server?

Susan Sarandon
Lepaskan: 2025-01-20 07:17:08
asal
858 orang telah melayarinya

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

SQL Server JOIN dan Penyata KES: Satu Perangkap Biasa

Dalam SQL Server 2008 R2 (dan versi terkemudian), cubaan menggunakan pernyataan CASE terus dalam keadaan JOIN untuk mentakrifkan kriteria gabungan boleh membawa kepada ralat sintaks. Mari kita periksa sebab dan cara untuk menyelesaikannya.

Pertimbangkan hubungan antara sys.partitions dan sys.allocation_units, di mana gabungan bergantung pada nilai sys.allocation_units.type. Pendekatan naif 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>
Salin selepas log masuk

Ini mengakibatkan ralat "Sintaks salah berhampiran '='". Masalahnya ialah ungkapan CASE itu sendiri tidak menghasilkan hasil Boolean (BENAR/PALSU) yang sesuai untuk keadaan gabungan. Sebaliknya, ia mengembalikan sama ada a.container_id = p.hobt_id atau a.container_id = p.partition_id, yang mana kedua-duanya bukan syarat cantum yang sah dengan sendirinya.

Pendekatan yang Betul: Penilaian Boolean

Untuk membetulkannya, kami memerlukan ungkapan CASE untuk menghasilkan nilai Boolean. Kita boleh mencapai ini dengan menstrukturkan pernyataan CASE untuk mengembalikan 1 untuk benar dan 0 untuk palsu, dan kemudian membandingkan hasilnya dengan 1:

<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>
Salin selepas log masuk

Sekarang, pernyataan CASE menilai kepada 1 hanya apabila keadaan yang sesuai (berdasarkan a.type) dan semakan kesaksamaan (a.container_id = p.hobt_id atau a.container_id = p.partition_id) adalah kedua-duanya benar. Perbandingan = 1 kemudian memberikan hasil Boolean yang diperlukan untuk keadaan JOIN. Pertanyaan yang disemak ini bergabung dengan jadual dengan betul. Kaedah ini memastikan bahawa keadaan JOIN dinilai kepada nilai benar atau salah, membolehkan cantuman berfungsi seperti yang dimaksudkan.

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

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan