CASE ステートメントは JOIN 条件で使用できますか?
sys.allocation_units
テーブルの列の値に基づいてテーブルを結合しようとすると、次のコードで構文エラーが発生します:
<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>
エラーの理由の説明:
CASE 式は等価式ではなく、単一の値を返します。この例では、CASE 式の結果を定数 (1 など) と比較して、条件が true かどうかを判断する必要があります。
修正コード:
<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>
このコードは CASE 式の結果を 1 と比較し、条件が true である行を返します。
以上がJOIN 条件で CASE ステートメントを使用できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。