从两个具有后备值的表格中获取列

时间:2017-02-15 11:28:47

标签: mysql select left-join multiple-tables fallback

我目前正在尝试从一个表中获取具有全局统计信息的对象,包括来自第二个表的每日统计信息。为此,我使用以下的连接查询,只要statsTable包含“Date”和“SELECT o.ID as ID, o.Image as Image, o.Text as `Text`, o.Views as `Views`, o.Clicks as Clicks, COALESCE(s.Views, 0) as DayViews, COALESCE(s.Clicks, 0) as DayClicks FROM objectTable o LEFT JOIN statsTable s ON o.ID = s.oID WHERE o.userID = 1 AND DATEDIFF(CURDATE(), s.Date) < 1 LIMIT 1 ”列的匹配行。

value=$(cat config.txt) 

即使statsTable不包含匹配的行,如何更改查询以获取结果行?

查询没有给出错误,我只是不希望它返回一个空结果,因为我确定objectTable中有数据。

1 个答案:

答案 0 :(得分:1)

您只需将s表上的条件移动到ON子句中:

SELECT o.ID as ID, o.Image as Image, o.Text as `Text`,
       o.Views as `Views`, o.Clicks as Clicks,
       COALESCE(s.Views, 0) as DayViews,
       COALESCE(s.Clicks, 0) as DayClicks
FROM objectTable o LEFT JOIN
     statsTable s
     ON o.ID = s.oID AND DATEDIFF(CURDATE(), s.Date) < 1
WHERE o.userID = 1 ;

LEFT JOIN保留第一个表中的所有行,无论ON子句的计算结果是否为true。对于不匹配的行,第二个表中的列为NULL - 然后WHERE子句会过滤掉。

因此, first 表中的条件应该在WHERE子句中。后续表格中的条件应该在ON子句中 - 对于LEFT JOIN