主键ID      Mid       name       no
1           12        笔       120120
2           12        笔       120120
3           12        笔       102103
4           14        书       150123
5           14        书       150123
6           15        道具     156154
7           16        神马     201012表名 bs
select * from bs as s where EXISTS (select 1 from bs where
 mid=s.mid group by mid having(count(mid))>1)
得到结果
主键ID      Mid       name       no
1           12        笔       120120
2           12        笔       120120
3           12        笔       102103
4           14        书       150123
5           14        书       150123select * from bs as s where EXISTS (select 1 from bs where
 mid=s.mid and no!=s.no)
得到结果
主键ID      Mid       name       no
1           12        笔       120120
2           12        笔       120120
3           12        笔       102103我只是想要个意思  为什么单个Mid的数据查不出来... 谁能告诉我 这两句话的意思  我以前很少用EXISTS 的

解决方案 »

  1.   

    我猜的
    1.第一句话:找记录中mid字段有重复的,记录
    2.第二句话:按mid字段找出记录中,no不唯一的记录
    EXISTS 用法,可以百度啊上面两句话,就是sql中常用的内关联子查询
      

  2.   

    select * from bs as s where EXISTS (select 1 from bs where
      mid=s.mid group by mid having(count(mid))>1)
    查询mid 是相同的并且数量>1的数据
      

  3.   

    1:select * from bs as s where EXISTS (select 1 from bs where
     mid=s.mid group by mid having(count(mid))>1) --明显不会出现单挑数据  有条件having(count(mid))>1
    2:select * from bs as s where EXISTS (select 1 from bs where
     mid=s.mid and no!=s.no)
     EXISTS : 指定一个子查询,检测行的存在 (EXISTS用于检查子查询是否至少会返回一行数据,该子查询实际上并不返回任何数据,而是返回值True或False)mid=s.mid and no!=s.no 能满足的条件 返回 True 或者false   
      

  4.   

    第一句找重复数据
    第二句找不唯一记录;如果相同的mid的no号都相同则不显示,所以结果集一中的4和5在结果集二中看不到。
    有点儿拗口,举个例子,你现在有1000条mid = 14, no = 150123的数据,在第二句查询结果集中将不会显示这1000条;如果这1000条里面有1条是mid = 14, no = 150122其他999条是mid = 14, no = 150123,那么这1000条都会显示。
      

  5.   

    select * from bs as s where EXISTS (select 1 from bs where
     mid=s.mid group by mid having(count(mid))>1)
    你后面子查询的条件 count(mid)>1  当然查询不出只有一条的数据了 改成>0就可以了
      

  6.   

    通常情况下Exists的性能要比In好。
    但也有特殊情况,在子查询中,外层查询用Exists比用In性能好;内层查询用In比Exists性能好。
      

  7.   

    那为什么select * from bs s where EXISTS (select 1 from bs group by mid having(count(mid))>1);会出现单条数据呢?
      

  8.   

    第二句 是别人教我写的  看查询结果 我理解的意思是 查询一个表中 某一列相同 另外的一列不相同  
    也就是说 mid 只要要有一样的两条以上的数据 才会查出来 而且mid 相同的数据中 至少要存在no 不一样 
    我知道光是看结果理解意思肯定是不行 下次再遇到类似还不是一样不会写...所以我必须理解意思查询结果倒是没有出现问题,...最主要的是我不明白这句话的意思....也许是不理解EXISTS 的意思....感谢各位提供的结果
      

  9.   

    select * from bs as s where EXISTS (select 1 from bs where
     mid=s.mid group by mid having(count(mid))>1)显示分类有两条信息及以上的商品select * from bs as s where EXISTS (select 1 from bs where
     mid=s.mid and no!=s.no)
    显示分类相同,但编号不同的商品