2017-03-14 27 views
0

我試圖使用左連接獲取3個表數據..表名是tblOffer,tblCompanyDetails和tblFavourite。從3個表中檢索數據,其中1個表可能不包含值,第3個表的'where'條件

SELECT tblOffer.OID, tblOffer.OfferCategory, 
    tblOffer.OfferTitle,tblOffer.OfferDetails, 
    tblOffer.ProductImagePath, 
    tblOffer.IsExciting, 
    tblOffer.ExpiringDate, 
    tblCompanyDetails . *, 
    tblFavourite.IsFavourite 
FROM tblOffer 
    LEFT JOIN tblCompanyDetails ON tblOffer.CID = tblCompanyDetails.CID 
    LEFT JOIN tblFavourite ON tblOffer.OID = tblFavourite.OID 
WHERE tblOffer.OfferCategory = 'shopping' 

tblFavourite中沒有行存在。所以tblFavourite.IsFavourite值爲空。

我還有一個條件從tblFavourite獲取數據。

SELECT tblOffer.OID, 
    tblOffer.OfferCategory, 
    tblOffer.OfferTitle, 
    tblOffer.OfferDetails, 
    tblOffer.ProductImagePath, 
    tblOffer.IsExciting, 
    tblOffer.ExpiringDate, 
    tblCompanyDetails . *, 
    tblFavourite.IsFavourite 
FROM tblOffer 
    LEFT JOIN tblCompanyDetails ON tblOffer.CID = tblCompanyDetails.CID 
    LEFT JOIN tblFavourite ON tblOffer.OID = tblFavourite.OID 
WHERE tblOffer.OfferCategory = 'shopping' 
    AND tblFavourite.UID = 1 

請注意我寫的條件.. tblFavourite.UID = 1在end.i知道這種情況是錯誤的。

我怎樣才能得到這三個表和tblFavourite.IsFavourite = 0,如果沒有行存在

回答

0

通過將tblFavourite.UID=1WHERE子句中,你已經有效地轉變上tblFavouriteLEFT JOININNER JOIN。如果將該條件移至ON子句而不是WHERE子句,則即使tblFavourites中沒有匹配的行,您仍然可以從主表(tblOffer)獲取行。

至於替換NULL0tblFavourite.IsFavourite,你可以用COALESCE()函數做到這一點。

像這樣的東西應該爲你工作:

SELECT tblOffer.OID, 
     tblOffer.OfferCategory, 
     tblOffer.OfferTitle, 
     tblOffer.OfferDetails, 
     tblOffer.ProductImagePath, 
     tblOffer.IsExciting, 
     tblOffer.ExpiringDate, 
     tblCompanyDetails.*, 
     COALESCE(tblFavourite.IsFavourite,0) 
FROM tblOffer 
LEFT JOIN tblCompanyDetails ON tblOffer.CID = tblCompanyDetails.CID 
LEFT JOIN tblFavourite ON tblOffer.OID=tblFavourite.OID AND tblFavourite.UID=1 
WHERE tblOffer.OfferCategory='shopping' 
+0

非常感謝你的兄弟..它的作品 – Nan

0

部位的條件在左邊的可選的數據連接,所以不會過濾出的結果,如果這個條件不滿足:

SELECT tblOffer.OID, 
tblOffer.OfferCategory, 
tblOffer.OfferTitle, 
tblOffer.OfferDetails, 
tblOffer.ProductImagePath, 
tblOffer.IsExciting, 
tblOffer.ExpiringDate, 
tblCompanyDetails . *, 
tblFavourite.IsFavourite 
FROM tblOffer 
LEFT JOIN tblCompanyDetails ON tblOffer.CID = tblCompanyDetails.CID 
LEFT JOIN tblFavourite on tblOffer.OID=tblFavourite.OID and tblFavourite.UID=1 
where tblOffer.OfferCategory='shopping' 
+0

我想返回0,如果tblFavourite.IsFavourite沒有values..yours在null..but這也幫助我將返回到實現的條件應該是可選在左邊join.thank你 – Nan

相關問題