簡體   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