mysql - 如果没有记录,忽略内部连接?
问题描述
必须满足这两个要求:
- 选择状态为“等待”的产品。
- 最后一封电子邮件必须是在 3 天前发送的。
给出了以下表格和列:
产品:id、名称、status_id、通知
状态:身份证,姓名
电子邮件日志:id、product_id、主题、文本、date_created
我尝试了以下方法:
SELECT
product.id
FROM
product
LEFT JOIN
status ON product.status_id = status.id
INNER JOIN
emaillog ON product.id = emaillog.product_id
AND (emaillog.date_created <= '2018-11-04 16:32:49')
WHERE
(status.name = 'waiting' AND product.notification = 1)
GROUP BY emaillog.product_id
这仅在 emaillogs 表中有记录时才有效。如果 emaillogs 表中没有记录,则仍应选择产品。
解决方案
如果要在结果集中保留未连接的行,请使用LEFT JOIN
而不是普通的内部。JOIN
但是,请注意,在 WHERE 子句中提及左连接表中的列会将左连接转换为内连接。
推荐阅读
- python - UnimplementedError:model.fit() 中不支持将字符串转换为浮点数
- c++ - C++ 可变数量的 std::vector 参数导致异常:std::bad_array_new_length
- python - Python计算机视觉代码中使用的前概率公式的统计意义?(matplotlib.image.imread)
- r - 在 gsub 期间保留换行符并选择性地缩进字符串
- react-native - 参考错误:找不到变量:React Native 中的导航
- azure - 有没有办法将多个虚拟网络附加到 Azure 中的负载均衡器?
- bash - 与字符串拆分作斗争
- python - 如何在守护进程 python 代码中使用 git?
- client-server - Vaadin 项目点击监听器双击行为
- google-sheets - Query + Importrange 函数不适用于包含参数 (QUERY: PARSE_ERROR)