这个查询有什么问题:
SELECT co.*, mod.COUNT(*) as moduleCount, vid.COUNT(*) as vidCount
FROM courses as co, modules as mod, videos as vid
WHERE mod.course_id=co.id AND vid.course_id=co.id ORDER BY co.id DESC
换句话说,我该如何处理从“类(class)”返回的每条记录,有 一个名为“modCount”的附加列显示模块表中该 course_id 的记录数,另一个名为“vidCount”的列对视频表执行相同的操作。
错误:
Error Number: 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') as moduleCount, vid.COUNT() as vidCount FROM courses as co, ' at line 1
最佳答案
使用子选择你可以:
SELECT co.*,
(SELECT COUNT(*) FROM modules mod WHERE mod.course_id=co.id) AS moduleCount,
(SELECT COUNT(*) FROM videos vid WHERE vid.course_id=co.id) AS vidCount
FROM courses AS co
ORDER BY co.id DESC
但要小心,因为当类(class)有很多行时,这是一个昂贵的查询。
编辑: 如果您的表非常大,则以下查询应该执行得更好(有利于阅读和理解更复杂)。
SELECT co.*,
COALESCE(mod.moduleCount,0) AS moduleCount,
COALESCE(vid.vidCount,0) AS vidCount
FROM courses AS co
LEFT JOIN (
SELECT COUNT(*) AS moduleCount, course_id AS courseId
FROM modules
GROUP BY course_id
) AS mod
ON mod.courseId = co.id
LEFT JOIN (
SELECT COUNT(*) AS vidCount, course_id AS courseId
FROM videos
GROUP BY course_id
) AS vid
ON vid.courseId = co.id
ORDER BY co.id DESC
关于sql - Mysql COUNT(*) 在多个表上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/944099/