2013-07-15 81 views
0

我試圖更好地理解JOIN或INNER JOIN SQL數據庫中的多個表。SQL INNER JOIN多個表不能按預期方式工作

以下是我有:

SQL查詢:

SELECT * 
FROM csCIDPull 
INNER JOIN CustomerData ON CustomerData.CustomerID = csCIDPull.CustomerID 
    INNER JOIN EMSData ON EMSData.EmsID = csCIDPull.EmsID 
; 

這不返回任何結果,如果刪除INNER JOIN EMSData部分,它提供了從CustomerDatacsCIDPull表的信息。我的思維方法可能不正確。我有5個表都帶有一個int ID,這些ID也提交給一個表來組合所有表(MAIN表只包含ID,而其他表包含數據)。

想想我會拍攝你們的人張貼,看看我可能做錯了什麼。 -Thanks

回答

1

基本上,你聽起來像沒有EMSData表中的匹配數據。你可能會需要使用此一OUTER JOIN

SELECT * 
FROM csusaCIDPull 
    LEFT JOIN CustomerData ON CustomerData.CustomerID = csCIDPull.CustomerID 
    LEFT JOIN EMSData ON EMSData.EmsID = csCIDPull.EmsID 

A Visual Explanation of SQL Joins

邊注:不考慮返回*而是選擇從每個表的欄目。

+0

LEFT JOIN效果很好。我還在玩耍一下,你提供的SQL Joins Visual Explain是非常有幫助的。在我的QUERY中,我只是使用*代碼進行測試,SELECT使用代碼中的特定單元格進行設置。 –

+0

一切都應該有數據,來發現,EMS只有3行,而CustomerData有7(忘記測試),更正了測試數據庫客戶數據表,它的工作完美無瑕。再次感謝您的洞察力。 –

0

它太多的覆蓋外連接VS內部在這個答案加盟,但我會通過研究兩者之間的區別入手:

這裏有一個簡短的首發:

內加入要求你有滿足加入標準的數據。如果由於某種原因,在EMSData和csCIDPull中沒有任何記錄並且有一個共同的EmsID - 根本不會返回任何記錄。如果是這樣的話,你應該考慮使用一個外部連接,而不是你想要從CustomerData中獨立返回EMDData連接的記錄。

8

enter image description here

選中此有關SQL連接