T-SQL:使用参数有条件地加入

And*_*Dev 2 t-sql sql-server conditional join

考虑一个简单的连接:

Select TableB.* 
From TableA 
Inner Join TableB 
    On TableB.ID = TableA.ID
Run Code Online (Sandbox Code Playgroud)

我想要做的是根据参数决定加入哪个表.虽然以下语法无效,但我写这篇文章只是为了说明我的意思:

Select TableD.* 
From TableA 
Inner Join 
    [If @useTableC = 1 Then Join to TableC Else Join to TableB] As TableD
Run Code Online (Sandbox Code Playgroud)

TableB和TableC都具有相同的列.

我怎样才能创建这种连接.请注意,此示例实际上是更大查询的一小部分,因此您不能只使用If ... Else语句.

非常感谢!

Ger*_*ima 6

通常我更喜欢在多个语句中重写,但如果你真的需要它:

SELECT td.*
FROM TableA ta
JOIN (
    SELECT tc.* FROM TableC Where @useTableC = 1
    UNION ALL
    SELECT tb.* FROM TableB Where @useTableC = 0
) td ON ( /* JOIN CONDITION MISSING */)
Run Code Online (Sandbox Code Playgroud)