日期:2014-05-17  浏览次数:20898 次

求助一SQL。。为什么我写的三表连接中会有重复数据?GROUP BY是不行的。。
表就不需要列出来了,我把我的SQL跟结果晒出来:

SQL code

SELECT C.COMPANY_NAME,C.REPRESENTATIVE,C.REGISTERED_CAPITAL FROM COMPANY_T C
LEFT JOIN Managed_Service_Provider M ON C.COMPANY_ID=M.COMPANY_ID
LEFT JOIN TELCOM_CARRIER T ON M.CARRIER_ID=T.CARRIER_ID
WHERE M.CARRIER_ID='100079'




结果:
  COMPANY_NAME REPRESENTATIVE REGISTERED_CAPITAL
1 山西晋通邮电实业有限公司 贺建兵 伍仟万元
2 山西晋通邮电实业有限公司 贺建兵 伍仟万元
3 山西晋通邮电实业有限公司 贺建兵 伍仟万元
4 山西光远技术有限公司 张晓军 贰仟万元
5 山西众至诚通信传输有限公司 刘占国 贰仟万元
6 太原市天地新通信有限公司 吕建民 贰佰万元

前三排明显数据重复的!!求解。。在线等!~先午休下去。。


------解决方案--------------------
看样子COMPANY_T是主表,
Managed_Service_Provider和TELCOM_CARRIER分别是子表和孙表。
中间肯定是1:M的关系,
所以在Select出来的结果,就是多条了呗。

最简单,也是最不负责的做法是在select后面加distinct,

要么,仔细研究业务,写成正确的SQL。
------解决方案--------------------
没见着group by 语句啊……

这种直接distinct
------解决方案--------------------
直接distinct效率太低,还是找出那张表又重复吧!
------解决方案--------------------
COMPANY_T或者Managed_Service_Provider 存在重复数据
问题在于表没有主键或者主键由多个列组成
------解决方案--------------------
应该是表COMPANY_T有重复数据 LZ可以先查看下 已这表为主表连接 还能重复 应该是这问题吧 或者是条件不够严谨导致重复
------解决方案--------------------
你本身数据就有这样的重复,所以我觉得你在查询的时候应该添加条件过滤重复的记录。sql不严谨。