SQL查询在连接时给出错误

时间:2016-05-16 12:36:32

标签: sql sql-server-2005

我想运行以下SQL查询:

SELECT 
    COUNT (a.status_flag) counts, a.mkey, a.to_user
FROM  inward_doc_tracking_hdr a
  LEFT JOIN user_mst b ON a.to_user = b.mkey
WHERE a.to_user = 1260 AND a.status_flag = 4.

但它没有运行,给出了这个错误:

  

Column' inward_doc_tracking_hdr.Mkey'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。

这里有什么问题?

我正在使用SQL-server-2005。

更新

当我运行简单的

时,我遇到了一个问题
select count(status_flag) from inward_doc_tracking_hdr where to_user = 1279 

我得到2分。

但是当我跑步时

SELECT COUNT (a.status_flag) counts, a.mkey, a.to_user, b.email, b.first_name + ' ' + b.last_name name FROM inward_doc_tracking_hdr a LEFT JOIN user_mst b ON a.to_user = b.mkey WHERE a.to_user = '1279' AND a.status_flag = '4' Group by a.mkey, a.to_user, b.email, b.first_name,b.last_name 

它显示了我的2行。

为什么?

3 个答案:

答案 0 :(得分:1)

每当select列表包含aggregatenon aggregate列的组合时,您需要添加Group bynon aggregate

SELECT COUNT (a.status_flag) counts, a.mkey, a.to_user
FROM inward_doc_tracking_hdr a
  LEFT JOIN user_mst b ON a.to_user = b.mkey
WHERE a.to_user = 1260 AND a.status_flag = 4
Group by a.mkey, a.to_user

答案 1 :(得分:1)

通常,当您使用带有聚合的LEFT JOIN时,您希望计算 second 表中的匹配数,而不是 first 。所以:

SELECT COUNT(b.mkey) as counts, a.mkey, a.to_user
FROM inward_doc_tracking_hdr a LEFT JOIN 
     user_mst b
     ON a.to_user = b.mkey
WHERE a.to_user = 1260 AND a.status_flag = 4
GROUP BY a.mkey, a.to_user;

您的查询版本(修复后)会返回" 1"即使b中没有匹配的行。

答案 2 :(得分:0)

您需要使用group by on columns不包含在count()

SELECT COUNT (a.status_flag) counts, a.mkey, a.to_user
FROM inward_doc_tracking_hdr a
  LEFT JOIN user_mst b ON a.to_user = b.mkey
WHERE a.to_user = 1260 AND a.status_flag = 4.
group by a.mkey, a.to_user