2015-07-03 28 views
0

我在select語句中有一個子查詢,我需要根據基本查詢找到一個計數。如果我對需要計數的course_id進行硬編碼(除此之外,計數僅用於列出相同的課程),但是當我將其更改爲使用列出的course_id時,它會返回1054-未知列錯誤。在選擇未知列的mysql子查詢

錯誤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表示: - :

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 

有什麼想法#1054未知列在 'where子句'

將運行SQL 'c.course_id'爲什麼當它拼寫正確但不工作時它不工作。

環境規格:

 
[[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 

感謝。

回答

0

有點凹陷使它更加明顯:

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