SQL 笛卡尔积 去重复记录
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 ...不太理解
------最佳解决方案--------------------如果出现重复值,那么很大可能是你的关联条件里面是有复合主键,但是没用全。导致无法唯一标识一条数据而导致的,先别马上distinct
------其他解决方案--------------------以下为估计猜测结果,呵呵
楼上说的好,三张表的大致结构给一下,大家就会有思路了,呵呵
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 ------其他解决方案--------------------1、要么设置主键,没有主键的表很痛苦,也不合逻辑
2、试试先用子查询查询出一部分的值,然后再拼起来,头疼,不想造数据。
------其他解决方案--------------------表结构给出来,给出1、2条数据来
------其他解决方案--------------------
distinct
------其他解决方案--------------------------其他解决方案--------------------
------其他解决方案--------------------Uniteng_head项目AJ_Record
AJ_Record对多WJ_Record
是这个逻辑么?
------其他解决方案--------------------inner join 怎么成了笛卡儿积?
------其他解决方案--------------------
额.忘了.我把那个改内连接了.但条件是一样的,结果也还是一样.
------其他解决方案--------------------
我看了下表设计,这几个表根本没用到复合主键,而且我不用主键关联结果还是一样,错的
------其他解决方案--------------------结构嘛,稍等我弄几个图
------其他解决方案-------------------- Uniteng_head怎么会有aj_id呢...他们是一对多的关系
------其他解决方案--------------------