簡體   English   中英

在外部主 SQL 中引用子查詢列

[英]Reference subquery column in outer main 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 courses.lessons l  
WHERE l.courseID = 1 AND percent > 30 
ORDER by `order` ASC

我正在使用子查詢,因為我返回的是一行(百分比最高),而不是所有行。 如果我使用LEFT JOIN ,我不知道我將如何只返回該 parent_lesson_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;

您試圖在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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM