MySQL选择条件左连接表返回不完整的结果集

时间:2011-08-07 01:01:34

标签: mysql sql

我有一个包含两个表的数据库:event和session(一个事件有多个会话)。

我正在构建一个查询,我想列出事件名称及其对应的第一个会话日期和上一个会话日期,以便用户可以看到范围。

问题是如果会话表没有事件的任何记录,事件未包含在结果集中(range_start和range_finish应为NULL)。

如何修复我的查询以包含事件表中的所有记录,即使它没有任何会话?

SELECT e.id, e.name, MIN(s.date_start) AS range_start, MAX(s.date_finish) AS range_finish
FROM `event` AS e
LEFT JOIN `session` AS s
ON e.id = s.event_id 
WHERE s.hidden != 1

1 个答案:

答案 0 :(得分:2)

SELECT e.id, e.name, MIN(s.date_start) AS range_start, MAX(s.date_finish) AS range_finish
FROM `event` AS e
LEFT JOIN `session` AS s
ON e.id = s.event_id 
WHERE (s.hidden != 1)
OR s.hidden IS NULL

假设s.hidden自然不能为空。