sql - 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,所以我该如何解决这个问题?
解决方案
使用带有 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()
推荐阅读
- selenium - Selenium 捕获 IE 和 Edge 控制台日志
- mysql - '字段列表'中的Spring + Hibernate未知列'users0_.task_id'
- javascript - 如何将html显示为文本?
- image - 计算两个图像之间的距离
- c# - 数据处理 OracleDataReader (OracleRefCursor) 的问题
- windows - 在 Windows 注册表中模拟 Python 安装
- reactjs - 如何处理阿波罗客户端上的突变错误?
- java - Keypress 不会触发我所有的社交按钮,只有一个?
- sql - case语句中的子查询
- mysql - 从 AMI 创建的 AWS EC2 实例不起作用(错误 504)- WEBb 不运行