我目前正在尝试从一个表中获取具有全局统计信息的对象,包括来自第二个表的每日统计信息。为此,我使用以下的连接查询,只要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中有数据。
答案 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
。