【发布时间】:2019-04-23 12:21:35
【问题描述】:
亲爱的,我有以下查询来计算每个用户的垃圾邮件数量和总订单数
我做了左连接,因为并非所有订单都有垃圾邮件
select users.firstName,users.lastName,users.Id,users.phoneNumber,count(CASE
WHEN comments.`commentType` = "spam" THEN 1 ELSE NULL END) as countSpam,
count(`orders`.`id`) as totalOrder
from `orders`,users,providers
LEFT JOIN comments ON `orders`.`id`= `comments`.`commentableId`
where
`orders`.`providerId` = `providers`.id
and
users.id = `providers`.userId
and
`orders`.`createdAt` >= (CURDATE() - INTERVAL 7 DAY)
GROUP BY users.id
ORDER BY countSpam DESC;
我从 mysql 收到以下错误
“on 子句”中的未知列“orders.id”
这里有什么问题?我根据旧查询正确地完成了 LEFT JOIN
【问题讨论】:
-
看起来
orders没有id列。推荐使用JOIN对抗users和providers。 -
它是存在的,亲爱的,因为它是主键 :D 我之前仔细检查过
-
请不要使用旧的基于逗号的隐式连接,而是使用现代的Explicit
Joinbased syntax。切换到基于ON子句的代码;您应该能够自动看到错误:-) 此外,在这种多表查询中,通常最好使用别名。