PHP中MySQL查询:筛选有员工的不重复企业记录
解决INNER JOIN后企业记录重复的问题
嘿,这个坑我之前踩过!你遇到的重复问题本质是一个企业对应多个员工记录,INNER JOIN会把每一条员工记录和企业记录做关联,所以一个企业有多少个员工,结果里就会出现多少次。给你三个实用的解决办法,随便挑一个都能搞定:
方法1:用DISTINCT直接去重
这是最直观的写法,直接在SELECT后面加DISTINCT关键字,让数据库自动过滤掉完全重复的行:
SELECT DISTINCT C.id, C.Company, C.Field, C.Country FROM first_table as C INNER JOIN second_table as E ON E.company_id = C.id
原理很简单:只要查询结果里的行完全一样,就只保留第一行,这样每个符合条件的企业只会显示一次。
方法2:用GROUP BY按企业分组
因为每个企业的id是唯一的,我们可以按企业的id(以及其他企业属性)分组,把同一家企业的多条合并成一行:
SELECT C.id, C.Company, C.Field, C.Country FROM first_table as C INNER JOIN second_table as E ON E.company_id = C.id GROUP BY C.id, C.Company, C.Field, C.Country
这种方法的好处是,如果之后你需要统计企业的员工数量(比如加个COUNT(E.id)),直接在SELECT里加聚合函数就行,扩展性更强。
方法3:用EXISTS子查询判断存在性
如果你的需求只是“找出有员工记录的企业”,用EXISTS可能更高效——它不需要做全量的JOIN,只检查是否存在至少一条匹配的员工记录:
SELECT C.id, C.Company, C.Field, C.Country FROM first_table as C WHERE EXISTS ( SELECT 1 FROM second_table as E WHERE E.company_id = C.id )
这里SELECT 1只是用来判断存在性,数据库不会实际返回这列,所以执行速度会更快,而且结果天然不会有重复,因为我们是直接从first_table里筛选符合条件的企业。
这三种方法都能解决你的问题,根据自己的实际需求选就行~
内容的提问来源于stack exchange,提问作者Rafael Schneider Pereira
相关产品推荐
相关产品推荐

