繁体   English   中英

选择未知列中的mysql子查询

[英]mysql subquery in select unknown column

我在select语句中有一个子查询,我需要根据基本查询找到一个计数。 如果我对需要计数的course_id进行硬编码(否则该计数仅针对同一课程而不是未列出的所有课程),但是当我更改为使用列出的course_id时,它将返回1054-未知列错误。

错误SQL

SELECT 
 c.course_id, 
 c.course_name,
 (SELECT COUNT(wpt_users_id)
  FROM (SELECT course_activity.wpt_users_id, course_activity.course_id, min(course_activity.course_activity_entry_dt)
  FROM wpt_user_subscriptions
  JOIN course_activity ON course_activity.wpt_users_id = wpt_user_subscriptions.wpt_users_id
  WHERE wpt_user_subscriptions.wpt_subscription_id = 35 
  AND course_activity.course_id = c.course_id
  GROUP BY course_activity.wpt_users_id, course_activity.course_id) sub1) as course_count
FROM `wpt_subscription_course` sc
JOIN course c ON c.course_id = sc.course_id
WHERE sc.`wpt_subscription_id` = 35

返回值:MySQL说:#1054-'where子句'中的未知列'c.course_id'

将运行SQL:

SELECT 
 c.course_id, 
 c.course_name,
 (SELECT COUNT(wpt_users_id)
  FROM (SELECT course_activity.wpt_users_id, course_activity.course_id, min(course_activity.course_activity_entry_dt)
  FROM wpt_user_subscriptions
  JOIN course_activity ON course_activity.wpt_users_id = wpt_user_subscriptions.wpt_users_id
  WHERE wpt_user_subscriptions.wpt_subscription_id = 35 
  AND course_activity.course_id = 9
  GROUP BY course_activity.wpt_users_id, course_activity.course_id) sub1) as course_count
FROM `wpt_subscription_course` sc
JOIN course c ON c.course_id = sc.course_id
WHERE sc.`wpt_subscription_id` = 35

关于拼写正确但仍无法正常运行的原因的任何思考。

环境规格:

[[Database server]]
Server type: MariaDB
Server version: 5.5.41-MariaDB - MariaDB Server
Protocol version: 10

[[phpMyAdmin]]
Version information: 4.4.8, latest stable version: 4.4.10

[[Web server]]
Apache/2.4.6 (CentOS) PHP/5.4.16
Database client version: libmysql - 5.5.41-MariaDB
PHP extension: mysqli Documentation
PHP version: 5.4.16

谢谢。

缩进一点使其更明显:

SELECT  c.course_id, c.course_name, 
      ( SELECT  COUNT(wpt_users_id)
            FROM  
              ( SELECT  ca.wpt_users_id, ca.course_id,
                        min(ca.course_activity_entry_dt)
                    FROM  wpt_user_subscriptions AS wus
                    JOIN  course_activity AS ca ON ca.wpt_users_id =
                                                  wus.wpt_users_id
                    WHERE  wus.wpt_subscription_id = 35
                      AND  ca.course_id = c.course_id   -- HERE
                    GROUP BY  ca.wpt_users_id, ca.course_id
              ) sub1
      ) as course_count
    FROM  `wpt_subscription_course` sc
    JOIN  course c ON c.course_id = sc.course_id        -- HERE
    WHERE  sc.`wpt_subscription_id` = 35

我认为子查询只能在紧邻的查询中看到表。

也许这可行并获得正确的答案??

SELECT  c.course_id, c.course_name, course_count
    FROM  `wpt_subscription_course` sc
    JOIN  course c ON c.course_id = sc.course_id
    JOIN  
      ( SELECT  COUNT(*) course_count, ca.wpt_users_id, ca.course_id,
                min(ca.course_activity_entry_dt)
            FROM  wpt_user_subscriptions AS wus
            JOIN  course_activity AS ca ON ca.wpt_users_id = wus.wpt_users_id
            WHERE  wus.wpt_subscription_id = 35
              AND  ca.course_id = c.course_id
            GROUP BY  ca.wpt_users_id, ca.course_id 
      ) sub1
    WHERE  sc.`wpt_subscription_id` = 35 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM