select * from member   a   
where (a.nameA,a.age) in (select   nameA,age   from   member   group  by   nameA,age     having   count(*)   >   1) 报错:',' 附近有语法错误。当我按下面写时没有问题,就多了一个字段,可别人说能行,不明白?select * from member  a 
where (a.nameA) in (select   nameA   from   member   group  by   nameA     having   count(*)   >   1)

解决方案 »

  1.   

    没有呀,我没有一个字段IN两个字段,我是两个字段IN两个字段呀?
      

  2.   

    select * from member a       
    where a.nameA in (select nameA from member group by nameA having count(*) > 1) and a.age in(select age from member group by age having count(*) > 1)
      

  3.   

    select * from tableA a  
    where (a.nameA,a.sex) in (select   nameA,sex   from   tableA   group  by   nameA,sex     having   count(*)   >   1)没写错字符?还有什么原因?
      

  4.   

    谁说这样能用啦,上面说能用的用来试试?多条件限制应该用exists
      

  5.   

    如果是你没有写错字段名或则是字符写错了(如:用了全角之类)的话,你的sql没有问题
      

  6.   

    忘了提醒,该语句在oracle中好使,但是在sqlserver中不好使
      

  7.   

    可以用临时表实现 示例如下:select autoId+1 as newAutoId,* into #temp from member  --这里假设你的member表里已经有一个自增字段
    --如果没有自增字段 将上句改为 select identity(int,1,1) as newAutoId,* into #temp from member
    select min(newAutoId) as newAutoId into #temp2 from #temp group by nameA,age having count(*)>1
    select * from #temp a,#temp2 b where a.newAutoId=b.newAutoId --这里选中的是重复行的每一条记录 多了一列newAutoId 当然你可将其过滤掉。
    --然后就可以按你的要求写自已的sql了 这里会了吧
    drop table #temp
    drop table #temp2
      

  8.   


    select * from  member a where exists(select 1  from  member where nameA=a.nameA and age=a.age  group  by  nameA,age having  count(*)>1) 
      

  9.   

    写法太多,随便写出几种,不一一列举了.根具不同的索引和数据匹配率,不同的语句效率也不一致.受索引和匹配率影响较小,且在各种情况下效率排前的写法,推荐 e,f,g. 没索引的话,c,d最快. exists写法受匹配率制约,在有索引的情况下,最快也是界于内连和in之间.--a
    SELECT * FROM member a
    WHERE EXISTS(SELECT 1 FROM member GROUP BY namea,age 
    WHERE namea=a.namea AND age=a.age
    GROUP BY namea,age
    HAVING COUNT(*)>1
    )
    --b
    SELECT * FROM member a
    WHERE EXISTS(SELECT 1 FROM member GROUP BY namea,age 
    WHERE CHECKSUM(namea,age)=CHECKSUM(a.namea,a.age)
    GROUP BY namea,age
    HAVING COUNT(*)>1
    )
    --c
    SELECT * FROM member
    WHERE CHECKSUM(namea,age) IN
    (
    SELECT CHECKSUM(namea,age) FROM member GROUP BY namea,age 
    GROUP BY namea,age
    HAVING COUNT(*)>1
    )
    --d
    SELECT * FROM member
    WHERE RTRIM(namea) + ',' + RTRIM(age) IN
    (
    SELECT RTRIM(namea) + ',' + RTRIM(age) FROM member GROUP BY namea,age 
    GROUP BY namea,age
    HAVING COUNT(*)>1
    )
    --e
    SELECT a.* FROM member a
    INNER JOIN
    (
    SELECT CHECKSUM(namea,age) cm FROM member GROUP BY namea,age 
    GROUP BY namea,age
    HAVING COUNT(*)>1
    ) b
    ON CHECKSUM(namea,age)=cm
    --f
    SELECT a.* FROM member a
    INNER JOIN
    (
    SELECT namea,age FROM member GROUP BY namea,age 
    GROUP BY namea,age
    HAVING COUNT(*)>1
    ) b
    ON a.namea=b.namea AND a.age=b.age
    --g
    SELECT a.* FROM member a
    INNER JION
    (
    SELECT RTRIM(namea) + ',' + RTRIM(age) nameAge FROM member GROUP BY namea,age 
    GROUP BY namea,age
    HAVING COUNT(*)>1
    ) b
    ON  RTRIM(namea) + ',' + RTRIM(age)=nameAge
      

  10.   

    5楼的是不是要改一下才对呀?select * from member a       
    where a.nameA in (select nameA from member group by nameA having count(*) > 1) and a.age in(select age from member group by age having count(*) > 1)
    之后为:select * from member a       
    where a.nameA in (select nameA from member group by nameA,age having count(*) > 1) and a.age in(select age from member group by nameA,age having count(*) > 1)
    不知道对不对?
      

  11.   

    18楼的不错  有个疑惑  group 后面 怎么还有 where
      

  12.   

    手误,不好意思. 语句都是我写了一行之后,其它的全是粘出来的.把 member GROUP BY namea,age  这里的group by namea,age去掉.感谢楼上指正.
      

  13.   

    select 1 from tb 
    这种语句你应该能理解吧, 不从tb表中查数据,只产生一个列,列值为常量, 当表中有记录时才能产生这个常量列.
    表中无记录时,就不会产生行.接下来select 1 from tb where id>5用了个过滤,
    也能理解吧
    即只有表中存在 id>5的记录时,才会产生列值为1的行.这里写1,跟你写你的字段名并无区别, 而上面回贴中的语句 就是指只要子查询的where条件满足,就能产生行的存在, 那么对于外部查询,它的where 后面的表达式的结果就为 true
      

  14.   

    我觉得是数据库的问题,oracle支持,sqlserver不支持
      

  15.   

    oracle 好像没有select 1 from TABLE1 的用法吧?
      

  16.   

    select   *   from   member       a       
    where   (a.nameA,a.age)   in   (select       nameA,age       from       member       group     by       nameA,age           having       count(*)       >       1)   
    ::::::会不会是因为你的age字段中有空值,以前我碰到过。你用sql profile监视一下传到sql server 的sql 语句,看看有没有空的age字段。
      

  17.   

    http://hi.baidu.com/850317
    http://hi.baidu.com/850317
    进来学习的
    占个座
      

  18.   

    看到楼主的错误提示,如果不是“,”号在中文模式下输入,那就是楼上几位朋友所说的,IN前不能带两个字段。换成=ANY(子查询),不成就用21楼的吧,不然SQL里设AND这个逻辑与运算就没什么用了!!
      

  19.   

    wss1801 
     
    等 级:
     发表于:2007-12-13 14:43:2629楼 得分:0 
    明白了,谢了! 
     -------------------
    楼主极不厚道。。有了正确答案不结帖
    强烈建议将楼主拉进黑名单。以后不答此人的贴。