sql - 存在where子句时postgresql不返回行
问题描述
我有两张表,一张是传感器在发生不同事件时记录不同的事件,另一张是包含所有可能事件列表的参考表。传感器表当前为空。
SELECT
events.eventtype,
count(sensor.eventtype)
FROM
events
LEFT JOIN sensor ON sensor.eventtype = events.eventtype
GROUP BY
events.eventtype
此查询正确返回事件列表及其发生情况(所有内容均为 0)
SELECT
events.eventtype,
count(sensor.eventtype)
FROM
events
LEFT JOIN sensor ON sensor.eventtype = allevents.eventtype
WHERE
eventdate = '2019-06-19'
GROUP BY
events.eventtype
但是,此查询不返回任何内容。where 子句有什么区别?
解决方案
您需要将过滤条件移至on
子句:
SELECT e.eventtype, count(s.eventtype)
FROM events e LEFT JOIN
sensor s
ON s.eventtype = e.eventtype AND
s.eventdate = '2019-06-19'
GROUP BY e.eventtype;
LEFT JOIN
返回不匹配的值NULL
。使用WHERE
子句中的条件,这些被过滤掉。
作为一般规则,当使用 a 时,第一个表LEFT JOIN
上的条件进入子句。后续表的条件放在子句中。WHERE
ON
推荐阅读
- python - DQN 不学习
- android - Android MediaRecorder 创建 16 位 PCM 编码的音频文件
- c# - 您可以将旧版本的 xml 反序列化为更新的结构吗
- java - 从 .jar 启动脚本
- python - 如何在numpy(RGBA)中正确创建空白彩色图像
- php - 文件名在 Web 服务器上的解释与在 Localhost 上的解释不同
- amazon-web-services - AWS ALB 使用 TLS 转发到 Lambda
- python-3.x - 如何将 dateTime 字符串转换为 dateTime
- python - 用bs4刮台
- docker - 如何在shell脚本中将命令的输出传递给另一个