1. ホーム
  2. sql

[解決済み] JOIN条件の中でCASE文を使用できますか?

2022-04-22 03:47:59

質問

次の画像は、Microsoft SQL Server 2008 R2 System Views の一部です。この画像から、以下の関係があることがわかります。 sys.partitionssys.allocation_units の値に依存します。 sys.allocation_units.type . そこで、それらを結合するために、次のようなことを書きます。

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 

しかし、上のコードではシンタックスエラーが発生します。その原因は CASE ステートメントを使用します。 どなたか少し解説していただけませんか?


エラーメッセージを追加します。

Msg 102, Level 15, State 1, Line 6 '=' 付近の構文が正しくありません。

解決方法は?

A CASE の値を返します。 THEN の部分を削除します。 このように使うことができます。

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

この文では、代入の値を返したり、等値性を調べたりしていますが、どちらも CASE / THEN の節を追加しました。 (もし BOOLEAN がデータ型であれば、等質性のテストは意味を持つだろう)。