当where子句存在时,PostgreSQL不返回行

时间:2019-06-19 10:49:15

标签: sql 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子句有什么区别?

1 个答案:

答案 0 :(得分:1)

您需要将过滤条件移至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子句中的条件,这些条件将被过滤掉。

通常,使用LEFT JOIN时, first 表的条件放在WHERE子句中。后续表的条件放在ON子句中。