[英]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.