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
Lepaskan: 2025-01-20 07:36:08
asal
799 orang telah melayarinya

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

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

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!

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