首页 > 解决方案 > SQL 查询在左连接中为空

问题描述

我有一张表格,其中包含有关我网站上帐户信息的个人资料。可以在不同的页面上推广个人资料。搜索页面和首页,直到过期日期。

促销活动存储在表 profile_promo 中,并由 profile_id 连接。

我的问题是,在搜索页面上,我想显示所有个人资料并加入促销表

LEFT JOIN profile_promotion pp ON pp.profile_id = profile.id 
WHERE (pp.page = 'search' OR pp.page is NULL) and pp.expire >= now()

只要搜索页面上有促销活动或根本没有促销活动,此方法就可以正常工作。

如果首页上只有促销活动,由于 WHERE,我的搜索页面根本不会得到任何结果。

但无论是否有促销活动,我仍然想要个人资料中的信息。请注意,个人资料可以同时在多个页面上进行促销(可能会改变一些逻辑)

我不擅长 SQL,所以我该如何解决这个问题?

标签: sql

解决方案


使用带有 LEFT JOIN 的 where 子句最终将其转换为 INNER JOIN。您需要将条件调整为-

LEFT JOIN profile_promotion pp ON pp.profile_id = profile.id 
                               AND (pp.page = 'search' OR pp.page is NULL)
                               AND pp.expire >= now()

推荐阅读