我无法控制数据库设置。我有这些:
东西有两个字段: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
工作了,但我不知道是否有更智能/更快的条件三角形连接,这些都是这样的。
这里没有解释,但我想继续加入ThingID。想象一下,我将基于这些继续加入表格。
答案 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;
如果表单和列表都匹配,则会产生不同的结果。但是,你在问题中说过,这并没有发生。