You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:54:01