none
求查询有重复的SQL RRS feed

答案

  • select [使用人] from [查询表哥] group by [使用人] having COUNT(1)>1
    Memory all alone in the moonlight~My Blog in .NET~~~
    2010年1月22日 8:37
  • --方法一:高效
    
    select * from
    (
    select *,UserNums=count (*) over (partition by UserName) from tUser
    )t
    where t.UserNums>1

    --方法二:一般
    select * from tUser t
    where (select count (*) from tUser where t.UserName=tUser.UserName)>1
    高效與一般的判斷是不正確的,測效率要用索引和覆蓋索引等因素測

    如果有主健的情況下,顯示所有列用

    select * from UserInfo a where exists(select 1 from UserInfo where Name=a.Name and ID<>a.ID)--ID為主健時,Name為使用人

    如果只顯示使用人時,用1樓的方法

    ROY WU(吳熹)
    2010年1月25日 3:07
    版主
  • 睦谢谢你们的指点, 我感觉SQL最难的是不知道用什么样的方法去解决问题, 像在这里我就不知道要用到子语句

    SELECT *
    FROM 电话使用人091230 AS a
    WHERE (((a.使用人) In (select 使用人 from 电话使用人091230 group by [使用人] having COUNT(1)>1)));

    這樣的結果集通常用in效率不高,需要看執行謀劃判斷,建議用exists或用inner join 把條件連接起來。

    查看執行謀劃的成本,就知道效率和要優化的位置,優化方法在硬件不變時分為實現方法和索引和分區表...

    ROY WU(吳熹)
    2010年1月25日 4:00
    版主
  • 我试着exists,但怎么都不成功,不知道为什么!
    把寫法貼出來

    用exists時,必髯要有相同列

    改為join用

    --在條件列上建索引
    select
        *
    from UserInfo a
        inner join (select Name from UserInfo group by Name having count(1)>)b on a.Name=b.Name


    ROY WU(吳熹)
    2010年1月25日 5:32
    版主
  • select * from
    (
    	select Name from UserInfo t2
    	group by t2.Name
    	having(count(*)>1)
    )t1 join UserInfo t3 on t1.Name=t3.Name
    
    或
    
    select * from UserInfo t1
    where
    exists
    (
    	select * from UserInfo t2
    	where t2.Name=t1.Name
    	group by t2.Name
    	having(count(*)>1)
    )
    2010年1月25日 7:53

全部回复

  • select [使用人] from [查询表哥] group by [使用人] having COUNT(1)>1
    Memory all alone in the moonlight~My Blog in .NET~~~
    2010年1月22日 8:37
  • 不行, 你这样是查有重复的记录, 而我要查只有使用人字段里有复重, 整条记录不一定重复.

    2010年1月22日 9:02
  • --方法一:高效
    select * from
    (
     select *,UserNums=count(*) over(partition by UserName) from tUser
    )t
    where t.UserNums>1
    
    --方法二:一般
    select * from tUser t
    where (select count(*) from tUser where t.UserName=tUser.UserName)>1
    2010年1月24日 4:10
  • --方法一:高效
    
    select * from
    (
    select *,UserNums=count (*) over (partition by UserName) from tUser
    )t
    where t.UserNums>1

    --方法二:一般
    select * from tUser t
    where (select count (*) from tUser where t.UserName=tUser.UserName)>1
    高效與一般的判斷是不正確的,測效率要用索引和覆蓋索引等因素測

    如果有主健的情況下,顯示所有列用

    select * from UserInfo a where exists(select 1 from UserInfo where Name=a.Name and ID<>a.ID)--ID為主健時,Name為使用人

    如果只顯示使用人時,用1樓的方法

    ROY WU(吳熹)
    2010年1月25日 3:07
    版主
  • 谢谢你们的指点, 我感觉SQL最难的是不知道用什么样的方法去解决问题, 像在这里我就不知道要用到子语句

    SELECT *
    FROM 电话使用人091230 AS a
    WHERE (((a.使用人) In (select 使用人 from 电话使用人091230 group by [使用人] having COUNT(1)>1)));

    2010年1月25日 3:45
  • 睦谢谢你们的指点, 我感觉SQL最难的是不知道用什么样的方法去解决问题, 像在这里我就不知道要用到子语句

    SELECT *
    FROM 电话使用人091230 AS a
    WHERE (((a.使用人) In (select 使用人 from 电话使用人091230 group by [使用人] having COUNT(1)>1)));

    這樣的結果集通常用in效率不高,需要看執行謀劃判斷,建議用exists或用inner join 把條件連接起來。

    查看執行謀劃的成本,就知道效率和要優化的位置,優化方法在硬件不變時分為實現方法和索引和分區表...

    ROY WU(吳熹)
    2010年1月25日 4:00
    版主
  • 我试着exists,但怎么都不成功,不知道为什么!
    2010年1月25日 5:01
  • 我试着exists,但怎么都不成功,不知道为什么!
    把寫法貼出來

    用exists時,必髯要有相同列

    改為join用

    --在條件列上建索引
    select
        *
    from UserInfo a
        inner join (select Name from UserInfo group by Name having count(1)>)b on a.Name=b.Name


    ROY WU(吳熹)
    2010年1月25日 5:32
    版主
  • select * from
    (
    	select Name from UserInfo t2
    	group by t2.Name
    	having(count(*)>1)
    )t1 join UserInfo t3 on t1.Name=t3.Name
    
    或
    
    select * from UserInfo t1
    where
    exists
    (
    	select * from UserInfo t2
    	where t2.Name=t1.Name
    	group by t2.Name
    	having(count(*)>1)
    )
    2010年1月25日 7:53