#1054 - 'where子句'中的未知列'XXXX'

时间:2013-05-03 12:44:26

标签: mysql sql

如何在子查询中引用父查询列?这是我的查询

    SELECT 
    c.username, c.staff_of, CONCAT(c.first_name, ' ', c.middle_name, ' ', c.last_name ) AS csr, 
    d.date, d.account, d.total_transaction, d.total_participate, d.total_amount,
    (SELECT COUNT(id) FROM users WHERE created_by = c.username ) AS total_agents
FROM `users` c,   
    (SELECT
          DATE(res_date) AS date, B.res_account AS account,
          COUNT(B.res_id) AS total_transaction,
          COUNT(DISTINCT(B.res_account)) AS total_participate,
          SUM(B.res_amount) AS total_amount
     FROM
          merchant_responses B
     WHERE B.res_account IN (SELECT t.staff_of FROM users t WHERE t.created_by = c.username)
     ) AS d
WHERE c.account_type ='DSO' GROUP BY c.username

这是我得到的结果

#1054 - Unknown column 'c.username' in 'where clause'

如何在子查询中显示c.username?

提前完成

2 个答案:

答案 0 :(得分:3)

这不是子查询,它是派生表。

 SELECT 
    c.username, c.staff_of, CONCAT(c.first_name, ' ', c.middle_name, ' ', c.last_name ) AS csr, 
    d.date, d.account, d.total_transaction, d.total_participate, d.total_amount,
    (SELECT COUNT(id) FROM users WHERE created_by = c.username ) AS total_agents
FROM `users` c,   
    (SELECT
          DATE(res_date) AS date, B.res_account AS account,
          COUNT(B.res_id) AS total_transaction,
          COUNT(DISTINCT(B.res_account)) AS total_participate,
          SUM(B.res_amount) AS total_amount
     FROM
          merchant_responses B
     WHERE B.res_account IN (SELECT t.staff_of FROM users t)
     ) AS d
WHERE c.account_type ='DSO' AND d.account = c.staff_of GROUP BY c.username

更新 更新了查询

答案 1 :(得分:2)

为什么要使用子表?你使用聚合函数SUM,但没有group by语句,我想你可以这样写

    SELECT c.username, 
           c.staff_of, 
           CONCAT(c.first_name, ' ', c.middle_name, ' ', c.last_name ) AS csr, 
           DATE(B.res_date) AS date, 
           B.res_account AS account, 
           COUNT(B.res_id) AS total_transaction, 
           COUNT(DISTINCT(B.res_account)) AS total_participate, 
           SUM(B.res_amount) AS total_amount,
           (SELECT COUNT(id) FROM users WHERE created_by = c.username ) AS total_agents
    FROM `users` c, merchant_responses B
    WHERE B.res_account IN (SELECT t.staff_of FROM users t WHERE t.created_by = c.username) 
    AND c.account_type ='DSO' 
    GROUP BY c.username

缺少c和B之间的连接,我无法添加它,因为我不知道密钥