sql server 2005/2008 条件连接

Nao*_*aor 4 t-sql stored-procedures view

是否有条件连接之类的东西:

SELECT *
FROM TABLE1 A
    IF (a=='TABLE2') THEN INNER JOIN TABLE2 B ON A.item_id=B.id
    ELSE IF (a=='TABLE3') THEN INNER JOIN TABLE3 C ON A.item_id=C.id
Run Code Online (Sandbox Code Playgroud)

而 a 是 TABLE1 中的一个字段。

我喜欢在不使用动态 sql 的存储过程中使用它(不将查询编写为字符串和 EXEC(@query))。

编辑:我不能写:

IF (a=='TABLE2) THEN queryA
ELSE IF (a=='TABLE3') THEN queryB
Run Code Online (Sandbox Code Playgroud)

因为 a 是 TABLE1 的一个字段。

Joe*_*lli 5

编辑:根据以下评论修改答案:

您可以尝试通过一些左连接变得聪明。这将返回更多列,因此您可能希望比SELECT *.

SELECT *
    FROM TABLE1 A
        LEFT JOIN TABLE2 B
            ON A.item_id = B.id
                AND A.a = 'TABLE2'
        LEFT JOIN TABLE3 C
            ON A.item_id = C.id
                AND A.a = 'TABLE3'
    WHERE (B.id IS NOT NULL AND A.a = 'TABLE2')
       OR (C.id IS NOT NULL AND A.a = 'TABLE3')
Run Code Online (Sandbox Code Playgroud)

  • 我要补充一点,您可能需要在输出列表中合并来自 B 和 C 的一些列,否则调用者将需要区分 1) 可能具有相同名称的列和 2) 复制分支逻辑。 (2认同)