0

我在 Mysql 中有 2 个表,一个是承包商,另一个是项目,我想生成一个承包商项目报告,显示项目的批准。问题是 INNER JOIN、LEFT 和 RIGHT OUTER JOIN,都产生相同的结果,即使我忽略了看起来很奇怪的情况,也只会显示承包商的项目。这是我的陈述

SELECT DISTINCT (tbl_contractor.name_v), count( tbl_project.name_v ) 
FROM tbl_contractor 
INNER JOIN tbl_project 
  ON tbl_project.Contractor=tbl_contractor.contractor_id_v 
  ON tbl_project.Contractor = tbl_contractor.contractor_id_v 
LIMIT 0 , 30;

SELECT DISTINCT (tbl_contractor.name_v), count( tbl_project.name_v ) 
FROM tbl_contractor
LEFT OUTER JOIN tbl_project 
ON tbl_project.Contractor = tbl_contractor.contractor_id_v 
LIMIT 0 , 30;
4

3 回答 3

2

您有一个聚合函数COUNT(), 没有GROUP BY. 这意味着您的查询将仅返回一行。

您可能需要一个GROUP BY(承包商):

SELECT tbl_contractor.name_v, COUNT( tbl_project.name_v ) 
FROM tbl_contractor
  LEFT OUTER JOIN tbl_project 
    ON tbl_project.Contractor = tbl_contractor.contractor_id_v 
GROUP BY tbl_contractor.contractor_id_v 
LIMIT 0 , 30;
于 2012-05-21T14:03:57.363 回答
0

通过执行SELECT DISTINCT (tbl_contractor.name_v)查询将只为每个承包商名称返回一行,尝试删除不同的并查看是否获得更好的承包商 - 项目结果。

于 2012-05-21T13:42:05.710 回答
0

这些查询实际上是按对承包商的查询分组的。如果每个承包商至少有一个项目,那么内连接和左外连接将返回相同的结果。如果有承包商没有项目,那么结果会受到 LIMIT 条款的影响。您只获得前 30 个,并且无论出于何种原因,匹配项首先出现。

于 2012-05-21T13:57:08.917 回答