2014-12-07 73 views
0

我有1個表包含主要行,我希望所有這些行。然後有兩個表可能沒有匹配的行,但如果這些表沒有匹配的行,我仍然需要來自主表的行。SQL三連接表中的某些行可能不存在

該查詢有效,但是如果在所有3個表中沒有一行,則不會返回任何結果。我使用MySQL與PHP。

SELECT PS_Info.* , PS_Guides.Guide, PS_User.UserID FROM PS_Info 
JOIN PS_Guides ON PS_Info.ID = PS_Guides.InfoID 
JOIN PS_User ON PS_Info.ID = PS_User.InfoID 
WHERE PS_Info.GameID = :ID AND PS_User.UserID = :UserID 

我想顯示在PS_Info中的列表。然後,如果用戶將它們設置爲隱藏(PS_User = UserID,InfoID),我想隱藏這些項目中的一部分。如果PS_User中沒有任何內容,那麼他​​們沒有設置這個項目被隱藏,所以我想顯示它。 PS_Guides包含有關列表中每個項目的額外信息。並非所有的項目都包含額外的信息,所以如果這個表格中沒有行,那麼我就不會顯示它。

+0

完美!謝謝! – 2014-12-07 13:05:39

回答

2
SELECT PS_Info.* , PS_Guides.Guide, PS_User.UserID FROM PS_Info 
left JOIN PS_Guides ON PS_Info.ID = PS_Guides.InfoID //use left join 
left JOIN PS_User ON PS_Info.ID = PS_User.InfoID //use left join 
WHERE PS_Info.GameID = :ID AND PS_User.UserID = :UserID 
+0

這解決了問題,但不完全。我還必須添加WHERE PS_Info.GameID =:ID和PS_User.UserID =:用戶ID或PS_User.UserID IS NULL – 2014-12-07 14:56:42

2

您正在尋找'left join'。

SELECT PS_Info.* , PS_Guides.Guide, PS_User.UserID FROM PS_Info 
LEFT JOIN PS_Guides ON PS_Info.ID = PS_Guides.InfoID 
LEFT JOIN PS_User ON PS_Info.ID = PS_User.InfoID 
WHERE PS_Info.GameID = :ID AND PS_User.UserID = :UserID 
相關問題