SQL Server JOIN での CASE ステートメントの利用
SQL Server JOIN 条件内で CASE ステートメントを使用するのは難しい場合があります。 JOIN 句で CASE ステートメントを直接使用すると、「'=' 付近の構文が正しくありません」などの構文エラーが発生することがよくあります。
構文エラーを理解する
このエラーは、CASE ステートメントがブール値の true/false 結果ではなく、スカラー値を生成するために発生します。 ただし、JOIN 条件では、行を結合するかどうかを決定するためにブール式が必要です。 比較のない単純な CASE ステートメントでは、このニーズは満たされません。
正しいアプローチ
解決策には、ブール値 (またはブール値と簡単に比較できる値) を出力する CASE ステートメントを設計することが含まれます。 この出力は、結合を制御するための比較に使用されます。
これは、改良された JOIN 条件の例です:
<code class="language-sql">ON CASE WHEN a.type IN (1, 3) THEN CASE WHEN a.container_id = p.hobt_id THEN 1 ELSE 0 END WHEN a.type IN (2) THEN CASE WHEN a.container_id = p.partition_id THEN 1 ELSE 0 END ELSE 0 END = 1</code>
この改訂されたステートメントでは、ネストされた CASE ステートメントが使用されています。 内部の CASE ステートメントは、結合条件が満たされる場合 (例: a.container_id = p.hobt_id
) に 1 を返し、そうでない場合には 0 を返します。次に、外側の CASE ステートメントでこれらの結果を結合します。 最後の比較 (= 1
) により、ネストされた CASE ステートメント内の条件が true の場合にのみ行が結合されることが保証されます。
このメソッドでは、JOIN 条件内の CASE ステートメントを効果的に使用して、特定の基準に基づいて行を条件付きで結合できます。
以上がSQL Server JOIN 条件で CASE ステートメントを効果的に使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。