SQL 查询在加入时给出错误
SQL query giving error on join
我想运行下面的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.
但不是运行ning,报错:
Column 'inward_doc_tracking_hdr.Mkey' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
这里有什么问题?
我正在使用 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 行。
为什么?
每当您的 select
列表包含 aggregate
和 non aggregate
列的组合时,您需要添加 Group by
和 non 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
您需要对不包含在计数中的列使用分组依据()
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
一般来说,当您使用带有聚合的 LEFT JOIN
时,您想要计算 秒 table 中的匹配数,而不是 第一。所以:
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;
即使 b
中没有匹配的行,您的查询版本(固定后)也会 return 计数为“1”。
我想运行下面的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.
但不是运行ning,报错:
Column 'inward_doc_tracking_hdr.Mkey' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
这里有什么问题?
我正在使用 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 行。
为什么?
每当您的 select
列表包含 aggregate
和 non aggregate
列的组合时,您需要添加 Group by
和 non 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
您需要对不包含在计数中的列使用分组依据()
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
一般来说,当您使用带有聚合的 LEFT JOIN
时,您想要计算 秒 table 中的匹配数,而不是 第一。所以:
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;
即使 b
中没有匹配的行,您的查询版本(固定后)也会 return 计数为“1”。