mysql - 从 3 个表中检索数据,其中 1 个表可能不包含值,并且第 3 个表的条件为 'where'

标签 mysql

我正在尝试使用左连接获取 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.IsFavouriteNULL 替换为 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/

相关文章:

mysql - 如何从 SQL Server 中不同行的列中取值?

mysql - 连接两个表时在mysql中查找重复值

MySQL:选择评论及其回复数

使用联接的 mysql 查询

mysql - 按日期顺序排序时,“使用临时”会减慢查询速度

c# - 返回 TEXT 列的参数化查询总是为 INT 列返回零

mysql - mysql 的已填充时区表(托管)

mysql - 同一张表上的多对一和一对一关系?

mysql约束无法添加

mysql_fetch_fields 返回的长度与预期不同