从具有回退值的两个表中获取列
Get columns from two tabels with fallback value
我目前正在尝试从一个 table 获取一个对象,该对象具有全局统计信息,包括第二个 table 的每日统计信息。为此,我使用以下连接查询,只要 statsTable 包含“oID
”和“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
即使 statsTable 不包含匹配行,我如何必须更改查询才能获得结果行?
查询没有给出错误,我只是不希望它 return 一个空的结果,因为我确信 objectTable 中有数据。
您只需将 s
table 上的条件移动到 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 ;
A LEFT JOIN
保留第一个 table 中的所有行,无论 ON
子句的计算结果是否为真。第二个 table 中的列是 non-matching 行的 NULL
—— 然后 WHERE
子句将其过滤掉。
因此,第一个 table 的条件应该在WHERE
子句中。后续 table 的条件应该在 ON
子句中——对于 LEFT JOIN
.
我目前正在尝试从一个 table 获取一个对象,该对象具有全局统计信息,包括第二个 table 的每日统计信息。为此,我使用以下连接查询,只要 statsTable 包含“oID
”和“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
即使 statsTable 不包含匹配行,我如何必须更改查询才能获得结果行?
查询没有给出错误,我只是不希望它 return 一个空的结果,因为我确信 objectTable 中有数据。
您只需将 s
table 上的条件移动到 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 ;
A LEFT JOIN
保留第一个 table 中的所有行,无论 ON
子句的计算结果是否为真。第二个 table 中的列是 non-matching 行的 NULL
—— 然后 WHERE
子句将其过滤掉。
因此,第一个 table 的条件应该在WHERE
子句中。后续 table 的条件应该在 ON
子句中——对于 LEFT JOIN
.