1. ホーム
  2. sql-server

[解決済み] 条件付きJOINステートメント SQL Server

2022-03-02 15:26:36

質問

以下のようなことは可能でしょうか?

IF [a] = 1234 THEN JOIN ON TableA 
ELSE JOIN ON TableB

その場合、正しい構文は何ですか?

どのように解決するのですか?

を結合することで、ご質問の内容はうまくいくと思います。 初期 テーブルを オプション_A オプション_B を使って LEFT JOIN とすると、次のようになります。

Initial LEFT JOIN Option_A LEFT JOIN NULL
OR
Initial LEFT JOIN NULL LEFT JOIN Option_B

コード例です。

SELECT i.*, COALESCE(a.id, b.id) as Option_Id, COALESCE(a.name, b.name) as Option_Name
FROM Initial_Table i
LEFT JOIN Option_A_Table a ON a.initial_id = i.id AND i.special_value = 1234
LEFT JOIN Option_B_Table b ON b.initial_id = i.id AND i.special_value <> 1234

これを実行すると、NULLSのセットを「無視」することになります。 ここでの追加のトリックはSELECT行にあり、NULLフィールドをどうするかを決める必要があります。 Option_A と Option_B のテーブルが類似している場合、Option_A と Option_B のテーブルの間で COALESCE 関数を使用して、最初のNULLでない値を返します(この例のように)。

もうひとつの方法は、Option_A フィールドと Option_B フィールドを単純にリストアップし、Option_A フィールドと Option_B フィールドの両方で ResultSet を使用して、どのフィールドを使用するかを決定します。