繁体   English   中英

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

[英]SQL Server - Joining two tables directly or, sometimes, through a third table

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

事物有两个字段:ListID,FormID。 列表也有一个FormID。

因此,Things可以直接加入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。 想象一下,我将基于这些继续连接表。

您可以使用coalesce()left outer join coalesce()执行您想要的操作:

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;

如果表单和列表都匹配,则会产生不同的结果。 但是,您在问题中说过不会发生这种情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM