[英]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
了这项工作,但我不知道是否存在更智能/更快的条件三角连接,沿着这些思路。
这里没有解释,但我想继续加入ThingID。 想象一下,我将基于这些继续连接表。
您可以使用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.