SQL Server - 直接连接两个表,有时通过第三个表连接

时间:2014-03-19 23:00:53

标签: sql sql-server tsql join

我无法控制数据库设置。我有这些:

东西有两个字段:ListID,FormID。 列表还有一个FormID。

因此,可以直接加入FormID,或通过列表加入FormID。

如果Thing.ListID为null,我想要那个Thing.FormID。 如果Thing.ListID不为null,我想要Lists.FormID。

我保证要么Things.FormID为NULL,要么Things.ListID为NULL;从来没有,也没有。

这就是我所拥有的:

SELECT
    t.ThingID
FROM
    Questions q JOIN
    Forms f 
        on q.FormID = f.FormID JOIN
    Lists l
        on f.FormID=l.FormID JOIN
    Things t
        on ((t.FormID = f.FormID) OR
            (t.ListID = l.ListID))

显然,我不知道JOIN中的OR是如何工作的。

我使用UNION工作了,但我不知道是否有更智能/更快的条件三角形连接,这些都是这样的。


这里没有解释,但我想继续加入Thi​​ngID。想象一下,我将基于这些继续加入表格。

1 个答案:

答案 0 :(得分:2)

您可以使用coalesce()left outer join

执行您想要的操作
SELECT coalesce(tf.ThingID, tl.thingID) as ThingID
FROM Questions q JOIN
     Forms f 
     on q.FormID = f.FormID JOIN
     Lists l
     on f.FormID = l.FormID LEFT JOIN
     Things tf
     on tf.FormID = f.FormID LEFT JOIN
     Things tl
     on tl.ListID = l.ListID;

如果表单和列表都匹配,则会产生不同的结果。但是,你在问题中说过,这并没有发生。