[英]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.