Mysql 错误代码:1146。表';大学规模小。成绩';不';使用sql临时表时不存在

Mysql 错误代码:1146。表';大学规模小。成绩';不';使用sql临时表时不存在,mysql,Mysql,我的sql语句如下: SELECT course_id FROM ( (SELECT COUNT(course_id) AS count FROM takes GROUP BY course_id) AS result) WHERE count IN (SELECT MAX(count) FROM result) 如何使用临时表两次?例如,此处的“结果”表。如果您只想获得最大进修次数的课程id,则可以按计数对子查询排序,并将结果集限制为一条记录 SELECT course_id, COUNT

我的sql语句如下:

SELECT course_id FROM (
(SELECT COUNT(course_id) AS count FROM takes GROUP BY course_id) AS result) 
WHERE count IN (SELECT MAX(count) FROM result)

如何使用临时表两次?例如,此处的“结果”表。

如果您只想获得最大进修次数的
课程id
,则可以按计数对子查询排序,并将结果集限制为一条记录

SELECT course_id, COUNT(course_id) AS count
FROM takes
GROUP BY course_id
ORDER BY COUNT(course_id) DESC
LIMIT 1
如果您还希望获得所有课程id值,那么如果最大录取人数相等,您可以尝试以下稍微复杂一点的查询:

SELECT result.course_id
FROM
(
    SELECT course_id, COUNT(course_id) AS count
    FROM takes
    GROUP BY course_id
) AS result
WHERE result.count = (
    SELECT COUNT(*)
    FROM takes
    GROUP BY course_id
    ORDER BY COUNT(*) DESC
    LIMIT 1
)

如果您只想获得最大进修次数的
课程id
,则可以按计数对子查询排序,并将结果集限制为一条记录

SELECT course_id, COUNT(course_id) AS count
FROM takes
GROUP BY course_id
ORDER BY COUNT(course_id) DESC
LIMIT 1
如果您还希望获得所有课程id值,那么如果最大录取人数相等,您可以尝试以下稍微复杂一点的查询:

SELECT result.course_id
FROM
(
    SELECT course_id, COUNT(course_id) AS count
    FROM takes
    GROUP BY course_id
) AS result
WHERE result.count = (
    SELECT COUNT(*)
    FROM takes
    GROUP BY course_id
    ORDER BY COUNT(*) DESC
    LIMIT 1
)

它真的很有效。它可以帮助我解决这个问题。但是我仍然想问两次关于使用临时表的问题。也许这在实践中并不常见。重用临时表的一种常见方法是一种称为公共表表达式(common table expression,CTE)的构造。SQL Server、Oracle和Postgres都支持此功能,但遗憾的是MySQL不支持此功能。不过,您可能可以使用视图或动态SQL在MySQL中重用临时表。它确实有效。它可以帮助我解决这个问题。但我仍然想问两次使用临时表的问题。在实践中可能不常见重用临时表的一种常见方法是一种称为公共表表达式(CTE)的构造。SQL Server、Oracle和Postgres都支持此功能,但遗憾的是MySQL不支持此功能。不过,您可以使用视图或动态SQL在MySQL中重用临时表。