Mysql 外部主SQL中的引用子查询列
在线课程脚本 这是我编写的SQL:Mysql 外部主SQL中的引用子查询列,mysql,sql,Mysql,Sql,在线课程脚本 这是我编写的SQL: SELECT l.`id` as parent_lesson_id, l.bigImageURL, l.name, (SELECT `percent` as percent FROM courses.`lesson_sessions` WHERE lesson_id = parent_lesson_id AND user_id = 52461 ORDER BY `percent` DESC LIMIT 1) as percent FROM cour
SELECT l.`id` as parent_lesson_id, l.bigImageURL, l.name,
(SELECT `percent` as percent FROM courses.`lesson_sessions`
WHERE lesson_id = parent_lesson_id AND user_id = 52461 ORDER BY `percent` DESC LIMIT 1) as percent
FROM courses.lessons l
WHERE l.courseID = 1 AND percent > 30
ORDER by `order` ASC
我使用子查询是因为我返回的是一行(百分比最高),而不是所有行。如果我使用了左联接
,我不知道如何只返回该父id百分比最高的行
一节课可以有多个课时,每个课时都有一个百分比
运行此查询时,我收到以下错误消息:
#1054 - Unknown column 'percent' in 'where clause'
我试图解决的问题:
如何返回所有课程行,其中百分比>30,仅从课程会话表中获取与课程相关的最高百分比行(一个课程可以有多个会话,每个会话具有不同的课程完成百分比)
基本上,我想返回所有百分比最高>30的课程
如果要在子查询内部以外的其他地方使用最大百分比,请将子查询从
SELECT
子句移动到from
子句。为了做到这一点,请使用聚合按课程获取最大值
SELECT
l.id as parent_lesson_id,
l.bigImageURL,
l.name,
p.max_percent as percent
FROM courses.lessons l
JOIN
(
SELECT lesson_id, max(percent) as max_percent
FROM courses.lesson_sessions
WHERE user_id = 52461
GROUP BY lesson_id
HAVING max(percent) > 30
) p ON p.lesson_id = l.id;
WHERE l.courseID = 1
ORDER by order ASC;
如果要在子查询内部以外的其他地方使用最大百分比,请将子查询从
SELECT
子句移动到from
子句。为了做到这一点,请使用聚合按课程获取最大值
SELECT
l.id as parent_lesson_id,
l.bigImageURL,
l.name,
p.max_percent as percent
FROM courses.lessons l
JOIN
(
SELECT lesson_id, max(percent) as max_percent
FROM courses.lesson_sessions
WHERE user_id = 52461
GROUP BY lesson_id
HAVING max(percent) > 30
) p ON p.lesson_id = l.id;
WHERE l.courseID = 1
ORDER by order ASC;
您试图在
WHERE
子句中使用派生列,这是不允许的:WHERE .... AND percent > 30
percent
是一个派生列。MySql允许在
HAVING
子句中使用派生列,因此更改为:
SELECT
l.id as parent_lesson_id, l.bigImageURL, l.name,
(
SELECT percent FROM courses.lesson_sessions
WHERE lesson_id = l.id AND user_id = 52461
ORDER BY percent DESC LIMIT 1
) percent
FROM courses.lessons l
WHERE l.courseID = 1
HAVING percent > 30
ORDER by l.`order` ASC
您试图在
WHERE
子句中使用派生列,这是不允许的:WHERE .... AND percent > 30
percent
是一个派生列。MySql允许在
HAVING
子句中使用派生列,因此更改为:
SELECT
l.id as parent_lesson_id, l.bigImageURL, l.name,
(
SELECT percent FROM courses.lesson_sessions
WHERE lesson_id = l.id AND user_id = 52461
ORDER BY percent DESC LIMIT 1
) percent
FROM courses.lessons l
WHERE l.courseID = 1
HAVING percent > 30
ORDER by l.`order` ASC
删除where子句中的` s from percent,我仍然会得到相同的错误@t1fEdit您的问题,并提供所有相关表结构的快照,如它们当前的状态(名称-列等)更好的方法是文本创建表格并重新生成问题删除where子句中的` s from percent,我仍然会得到相同的错误@t1fEdit您的问题,并提供所有相关表格结构的快照(名称-列等)。更好的方法是文本创建表格并重新生成问题