Join

SQL Join/聯合問題例如__我___b和G一世n和rbeginer

  • February 21, 2017

我有兩個表,如下所示,包含以下列:

$$ table #Completed $$ Client_ID、ClientName、FirstDeliveryStatus、FirstDeliveryDate $$ table #Planned $$ Client_ID、ClientName、NextDeliveryStatus、NextDeliveryDate 在此處輸入圖像描述

如您所見,客戶有一些已完成和計劃的傳遞。我正在嘗試合併兩個表以顯示每個患者:

Client_ID、ClientName、FirstDeliveryStatus、FirstDeliveryDate、NextDeliveryStatus、NextDeliveryDate

我試圖從表 Completed 和外部/內部連接表 Planned 中選擇數據,但它對我不起作用。主要問題是第 6 行

$$ Ashton $$誰從來沒有完成過傳遞,一旦我加入了有關他計劃傳遞的詳細資訊-我在 Client_ID 和 ClientName 上得到空值 我希望看到如下視覺化的輸出

在此處輸入圖像描述

任何幫助,將不勝感激

您必須首先決定:我要返回哪個表的所有記錄?

你的答案聽起來像“客戶”。所以從你的客戶表開始:

SELECT ClientID, ClientName
FROM Client

然後問:我要添加哪些表?

您的答案聽起來像“已完成”和“已計劃”。因此,將它們加入客戶:

SELECT c.ClientID, c.ClientName
FROM Client AS c
JOIN Completed AS comp ON c.ClientID = comp.ClientID
JOIN Planned AS p ON c.ClientID = p.ClientID

現在問:我是想返回我的客戶表中的所有欄位,還是只返回兩個表中都有匹配記錄的欄位?

您的答案似乎是:“來自客戶端的所有記錄以及來自其他表的任何匹配”。因此,為此,從您的基礎外部連接到表並返回您想要的列:

SELECT c.ClientID, c.ClientName, comp.FirstDeliveryStatus, comp.FirstDeliveryDate, p.NextDeliveryStatus, p.NextDeliveryDate
FROM Client AS c
LEFT OUTER JOIN Completed AS comp ON c.ClientID = comp.ClientID
LEFT OUTER JOIN Planned AS p ON c.ClientID = p.ClientID

現在,如果您只希望在 Completed 或 Planned 表中有記錄,請添加過濾器:

SELECT c.ClientID, c.ClientName, comp.FirstDeliveryStatus, comp.FirstDeliveryDate, p.NextDeliveryStatus, p.NextDeliveryDate
FROM Client AS c
LEFT OUTER JOIN Completed AS comp ON c.ClientID = comp.ClientID
LEFT OUTER JOIN Planned AS p ON c.ClientID = p.ClientID
WHERE p.ClientID IS NOT NULL OR comp.ClientID IS NOT NULL

引用自:https://dba.stackexchange.com/questions/165073