Mysql 外部主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

在线课程脚本

这是我编写的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 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您的问题,并提供所有相关表格结构的快照(名称-列等)。更好的方法是文本创建表格并重新生成问题