我正在尝试使用左连接获取 3 个表数据。表名称为 tblOffer、tblCompanyDetails 和 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'
tblFavourite 中不存在行。所以 tblFavourite.IsFavourite 值为 null。
我还有一个条件要从 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。我知道条件是错误的。
如果不存在行,我如何获得这三个表和 tblFavourite.IsFavourite = 0
最佳答案
通过将 tblFavourite.UID=1
放入 WHERE
子句中,您已有效地转换 tblFavourite
上的 LEFT JOIN
code> 转换为 INNER JOIN
。如果您将该条件移至 ON
子句而不是 WHERE
子句中,那么您仍然会从主表 (tblOffer
) 中获取行,即使如果 tblFavourites
中没有匹配的行。
对于将 tblFavourite.IsFavourite
的 NULL
替换为 0
,您可以使用 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'
关于mysql - 从 3 个表中检索数据,其中 1 个表可能不包含值,并且第 3 个表的条件为 'where',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42787809/