SQL 笛卡尔积 去重复记录

liujin9012 2012-11-13 01:29:43
select count(distinct Uniteng_head.projectid)项目,count( Uniteng_head.uniteng_id)单位工程,
count( AJ_Record.aj_id)案卷,count(WJ_Record.wj_id)文件,sum(WJ_Record.sl)图纸
from Uniteng_head inner join AJ_Record
on AJ_Record.Unitengid=Uniteng_head.UnitEng_id
inner join WJ_Record on WJ_Record.aj_id=AJ_Record.aj_id
这里用到的distinct 是要统计项目数,又不想去项目表里查而用的.但就是这样,查出的结果还是有重复记录.
本来应该是 2 4 8 11 356 ,现在是 2 11 11 11 356.有人说用cast ...不太理解
...全文
830 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
猫侠 2012-11-13
  • 打赏
  • 举报
回复
什么叫“滴”。。。。。。。。。。。
liujin9012 2012-11-13
  • 打赏
  • 举报
回复
引用 20 楼 oqqLiAo1234567 的回复:
估计就是AJ_Record、WJ_Record 两表的关联限制条件吧 select count(distinct Uniteng_head.projectid)项目, count(Uniteng_head.uniteng_id)单位工程, count(AJ_Record.aj_id)案卷, count(WJ_Record.wj_id)文件, sum(WJ……
这样是不行滴.
猫侠 2012-11-13
  • 打赏
  • 举报
回复
还是不行的话,我投降,关注中。。。。。呵呵
猫侠 2012-11-13
  • 打赏
  • 举报
回复
估计就是AJ_Record、WJ_Record 两表的关联限制条件吧 select count(distinct Uniteng_head.projectid)项目, count(Uniteng_head.uniteng_id)单位工程, count(AJ_Record.aj_id)案卷, count(WJ_Record.wj_id)文件, sum(WJ_Record.sl)图纸 from Uniteng_head inner join AJ_Record on AJ_Record.Unitengid=Uniteng_head.UnitEng_id inner join WJ_Record on WJ_Record.aj_id=AJ_Record.aj_id AND WJ_Record.Unitengid=Uniteng_head.UnitEng_id AND WJ_Record.M_XH=AJ_Record.M_XH
liujin9012 2012-11-13
  • 打赏
  • 举报
回复
引用 15 楼 DBA_Huangzj 的回复:
1、要么设置主键,没有主键的表很痛苦,也不合逻辑 2、试试先用子查询查询出一部分的值,然后再拼起来,头疼,不想造数据。
主键肯定是有的,每个表第一列就是主键
liujin9012 2012-11-13
  • 打赏
  • 举报
回复
引用 16 楼 oqqLiAo1234567 的回复:
select count(distinct Uniteng_head.projectid)项目, count(Uniteng_head.uniteng_id)单位工程, count(AJ_Record.aj_id)案卷, count(WJ_Record.wj_id)文件, sum(WJ_Record.sl)图纸 from Uniteng_head in……
这样要是行我就不用来问了 - -
liujin9012 2012-11-13
  • 打赏
  • 举报
回复
引用 14 楼 oqqLiAo1234567 的回复:
Uniteng_head对多AJ_Record AJ_Record对多WJ_Record 是这个逻辑么?
是的
猫侠 2012-11-13
  • 打赏
  • 举报
回复
select count(distinct Uniteng_head.projectid)项目, count(Uniteng_head.uniteng_id)单位工程, count(AJ_Record.aj_id)案卷, count(WJ_Record.wj_id)文件, sum(WJ_Record.sl)图纸 from Uniteng_head inner join AJ_Record on AJ_Record.Unitengid=Uniteng_head.UnitEng_id inner join WJ_Record on WJ_Record.aj_id=AJ_Record.aj_id AND WJ_Record.Unitengid=Uniteng_head.UnitEng_id
發糞塗牆 2012-11-13
  • 打赏
  • 举报
回复
1、要么设置主键,没有主键的表很痛苦,也不合逻辑 2、试试先用子查询查询出一部分的值,然后再拼起来,头疼,不想造数据。
猫侠 2012-11-13
  • 打赏
  • 举报
回复
Uniteng_head对多AJ_Record AJ_Record对多WJ_Record 是这个逻辑么?
猫侠 2012-11-13
  • 打赏
  • 举报
回复
Uniteng_head项目AJ_Record AJ_Record对多WJ_Record 是这个逻辑么?
liujin9012 2012-11-13
  • 打赏
  • 举报
回复
单位工程表

案卷表

文件表

单位工程表中一条记录对应案卷表中的一条或多条记录
案卷表中一条对应文件表中的一条或多条
xb12369 2012-11-13
  • 打赏
  • 举报
回复
引用 8 楼 DBA_Huangzj 的回复:
引用 6 楼 xb12369 的回复:distinct
liujin9012 2012-11-13
  • 打赏
  • 举报
回复
引用 7 楼 oqqLiAo1234567 的回复:
以下为估计猜测结果,呵呵 楼上说的好,三张表的大致结构给一下,大家就会有思路了,呵呵 Uniteng_head项目表 WJ_Record项目相关文件表 WJ_Record项目相关图纸表 项目会对应多个文件,这样关联到图纸表就会有笛卡尔积,所以帮你加个条件 select count(distinct Uniteng_head.projectid)项目……
Uniteng_head怎么会有aj_id呢...他们是一对多的关系
liujin9012 2012-11-13
  • 打赏
  • 举报
回复
结构嘛,稍等我弄几个图
發糞塗牆 2012-11-13
  • 打赏
  • 举报
回复
引用 6 楼 xb12369 的回复:
distinct
猫侠 2012-11-13
  • 打赏
  • 举报
回复
以下为估计猜测结果,呵呵 楼上说的好,三张表的大致结构给一下,大家就会有思路了,呵呵 Uniteng_head项目表 WJ_Record项目相关文件表 WJ_Record项目相关图纸表 项目会对应多个文件,这样关联到图纸表就会有笛卡尔积,所以帮你加个条件 select count(distinct Uniteng_head.projectid)项目, count(Uniteng_head.uniteng_id)单位工程, count(AJ_Record.aj_id)案卷, count(WJ_Record.wj_id)文件, sum(WJ_Record.sl)图纸 from Uniteng_head inner join AJ_Record on AJ_Record.Unitengid=Uniteng_head.UnitEng_id inner join WJ_Record on WJ_Record.aj_id=AJ_Record.aj_id and Uniteng_head.aj_id=AJ_Record.aj_id
xb12369 2012-11-13
  • 打赏
  • 举报
回复
distinct
發糞塗牆 2012-11-13
  • 打赏
  • 举报
回复
表结构给出来,给出1、2条数据来
liujin9012 2012-11-13
  • 打赏
  • 举报
回复
引用 3 楼 DBA_Huangzj 的回复:
如果出现重复值,那么很大可能是你的关联条件里面是有复合主键,但是没用全。导致无法唯一标识一条数据而导致的,先别马上distinct
引用 3 楼 DBA_Huangzj 的回复:
如果出现重复值,那么很大可能是你的关联条件里面是有复合主键,但是没用全。导致无法唯一标识一条数据而导致的,先别马上distinct
我看了下表设计,这几个表根本没用到复合主键,而且我不用主键关联结果还是一样,错的
加载更多回复(3)

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧