select dbm,zm from zd_zmzd where dbm in(select dbm from fh_qsyt1_user) order by dbm
我这查询出来的dbm,zm都是重复一次的数据,怎么回事?我记得前一段还没有什么问题啊
请确认表里数据是否重复,句子没问题
别说加distinct的,这句sql哪里有问题?
group by 分组
zd_zmzd表里的dbm字段不是唯一约束的,有重复记录
select dbm from fh_qsyt1_user 查出来的dbm是多个吧
dbm,zm都是重复一次的数据,不代表是同一条数据,把主键也查出来看看
select dbm,zm,count(1) from zd_zmzd group by dbm,zm检查下
首先看看你的子句查询出来的是不是重复的数据
由于你两个表有相同字段,只需要带上表名或重命名即可
括号里面用distinct
直接单表查 dbm=某个值看是否是真的重复
(select dbm from fh_qsyt1_user) 在这部分检索出来的结果,就是带重复的dbm,所以会存在重复问题,可以在这部分家distinct。
由于你两个表有相同字段
你可以用联合查询,可以不用子查询,这样不容易出错。
1.楼上所说两个表有相同字段不可能,如果出现这种情况会报错,因为字段有混淆。
2.你的语句没有问题
3.你所说的问题在于你的表中有真实的重复信息,请检查数据
如果采纳请确认,急需C币下载文件,非常感谢!
select dbm from fh_qsyt1_user 这个查出来有没有重复数据?
最好是把结果或者表的结构贴出来看看,上面的人都分析的差不多了,这个查询语句是挺简单逻辑。
这条sql本身很简单,非要说问题的话, sql性能优化 一般禁止用in, 一般都用EXISTS
例:select * from test1
where EXISTS (select * from test2 where id2 = id1 )
那个是唯一的字段 你直接分组一下 group by 去重一下 不行在后面加一个 having count(*)<1
通常关联外部表时 是需要做分组的group by否则 显示结果很有很大纰漏
fh_qsyt1_user 你这个表出的问题
如果是fh_qsyt1_user关联表的话 select dbm from fh_qsyt1_user 你这种没有条件控制查询所有 必然会出现重复结果 导致整体结果重复
如果fh_qsyt1_user 不是关联表的话 看看有没有重复脏数据
再者 是不是缓存的影响
你group by 分组一下 不行再后面加个 having count(*)<1
查一下 fh_qsyt1_user 表中 dbm 是不是有重复的
语句看着没什么问题,且跟表fh_qsyt1_user是否字段相同的记录太多没关系,很可能是zd_zmzd表中相同字段dbm, zm的记录重复的太多。
可以查询下整张表确认下看看,select * from zd_zmzd;
select dbm from fh_qsyt1_user 查出来的dbm是多个
都是重复一次的数据,不代表是同一条数据,把主键也查出来看看
你看看子句查出的是什么
select dbm,zm from zd_zmzd zd where zd.dbm in(select dbm from fh_qsyt1_user fh) order by zd.dbm
或者
select dbm,zm from zd_zmzd zd where zd.dbm in(select dbm from fh_qsyt1_user fh) order by fh.dbm
这样应该没问题了,主要是order by dbm中的dbm在两个表中都有,需要限制一下,指清dbm到底是哪个的dbm
加个where条件吧
dbm和zm联合起来在表zd_zmzd 里不是主键,即不是唯一的, 后面的where条件只是过滤行,没有办法去重。
select dbm from fh_qsyt1_user 改成 select dbm from fh_qsyt1_user group by dbm
先看看in里面的语句查询的是否是重复的,如果重复就是它的问题,如果不重复,可以创建两个和他们一样的表,都相应只添加几条数据(可以吧重复的数据摘取几条添加),用这两个表测试一下,这样可能更容易找到问题。
子查询可能是多个结果集
select dbm from fh_qsyt1_user 里面应该有重复的吧。
1.可能是数据库数据重复
2.解决重复数据sql
sql语句加distinct去除重复
select distinct dbm,zm from zd_zmzd where dbm in(select dbm from fh_qsyt1_user) order by dbm
这个sql语句不像有问题啊,看看数据项有没有重复吧
select dbm,zm from zd_zmzd where dbm in(select distinct dbm from fh_qsyt1_user) order by dbm
select * from 数据库名称,这种情况默认下是查询所有的,也就是及时重复也会显示
select DISTINCT * from 数据库名称
对于某一列,可以用group by 假如group by是count值大于1,那就是重复语句了
应该私子句查询出来的有重复的
一般都要主键和外键吧,那样更明确吧
sql语句确实没问题,可能是数据库数据重复吧。或者可以通过加distinct关键字去重复
参考group by have 语句
多表联查的时候 有可能其中一个id关联的数据有多条 这样就会产生重复的数据了 建议用分组尝试一下
select distinct mr.id,ifnull(mr.pid,0) as pid,mr.name
from sys_role_res srr
left join main_res mr on mr.id=srr.res_id
left join sys_role sr on sr.id=srr.role_id
left join bas_member_role bmr on bmr.role_id=sr.id
left join bas_member bm on bmr.member_id=bm.id
where bm.id = 4
and mr.is_delete = 0
and ifnull(mr.permission,0) = 0
order by mr.id select distinct 查询值name from 表 where 条件