どのジョインを行うかを選択するときに条件文を実行できるかどうかを知りたいと思います。SQL条件付きジョイン(内部または外部)
SELECT * FROM Table1
IF (TRUE) THEN INNER JOIN
ELSE (FALSE) THEN OUTER JOIN
END
Table2 ON (SOME CONDITION)
これは明らかに動作しませんが、私はそれがより良い私の質問を示していると思う:私が何を意味するかの例は、のようなものかもしれません。
どのジョインを行うかを選択するときに条件文を実行できるかどうかを知りたいと思います。SQL条件付きジョイン(内部または外部)
SELECT * FROM Table1
IF (TRUE) THEN INNER JOIN
ELSE (FALSE) THEN OUTER JOIN
END
Table2 ON (SOME CONDITION)
これは明らかに動作しませんが、私はそれがより良い私の質問を示していると思う:私が何を意味するかの例は、のようなものかもしれません。
あなたが戻ってくるものはまったく明確ではありません。 IFが行単位で動作するか、クエリ全体に対して一度動作することを期待していますか?
おそらく OUTER JOINで必要なものを取得し、WHERE句で結果をフィルタリングすることができます。
いいえこれが必要な場合は、動的にクエリ文字列を作成して実行する必要があります。または、常に外部結合を行い、条件に基づいてフロントエンドで実際に使用する列を選択します。どんな場合でも、より多くの情報がなくても、どんな意味があるのかは分かりません。
これは、あなたが
外側、内側と外側、内側はもちろん参加含ん参加の両方に同じ列を持っていると思い前提としています。唯一の違いは、WHEREでソートすることができたか非一致する行が処理されています句
SELECT
col1, col2
FROM
Table1
LEFT OUTER JOIN
Table2 ON ... (SOME CONDITION)
WHERE
(conditional = true AND table2.key IS NOT NULL)
OR
(conditional = false AND table2.key IS NULL)
OR
ないとパフォーマンスに関する保証は、しかし、あなたが行うことができますが、両方の作成参加し、その後、あなたには、いくつかの出力列のデータを抽出した1つを選択するための条件を使用して..です。
Select Case When [Some boolean condition]
Then A.ColumnName
Else B.ColumnName End as OutputColumnName
From Table
Left Join OneTable As A
On [Join conditions]
Left Join OtherTable As B
On [Join conditions]
これは、同じように
Select Case When [Some boolean condition]
Then A.ColumnName
Else B.ColumnName End as OutputColumnName
From Table
[Inner] Join TheTable As A
On [Join conditions]
Left [Outer] Join TheTable As B
On [Join conditions]
ありがとう、あなたの特定の懸念[インナー、アウター]を対処するために変更することができます。あなたのソリューションは私にとっても完璧に機能しました。これは振り返ってみるととてもシンプルで分かりやすいようです;-) –
table2が膨大なもの(何百万というレコード)があり、条件が満たされていないとどうしても結合したくないのですが? – Ben