要求一条sql语句,这个比较困难,还是用游标的简单

解决方案 »

  1.   

    SELECT A.COL1,A.COL2,A.COL3
    FROM 
        (SELECT A.COL1,A.COL2,A.COL3
         FROM TEST A,GROUP B
         WHERE A.USER_ID = B.USER_ID
         GROUP BY A.COL1,A.COL2,A.COL3,B.GROUP_ID) A
    GROUP A.COL1,A.COL2,A.COL3
    HAVING COUNT(*)>1
      

  2.   

    楼上的语句有点问题吧?
    1. user_id有可能不属于任何group(如34)
    2. 最好能分步进行的,比如被分配给的多个user_id属于同一个group如何判断??(关键在此)
      

  3.   

    不会啊  如果不属于任何group  那么也不需要查出来了  你说对不对
    这么简单的查询  分步进行  不是太浪费了吗
      

  4.   

    SELECT AA.COL1,AA.COL2,AA.COL3
    FROM 
        (SELECT A.COL1,A.COL2,A.COL3
         FROM TEST A, GROUP1 B
         WHERE A.USER_ID = B.USER_ID(+)   
         GROUP BY A.COL1,A.COL2,A.COL3,B.GROUP_ID) AA
    GROUP AA.COL1,AA.COL2,AA.COL3
    HAVING COUNT(*)>1
      

  5.   

    这样应该可以:select B.COL1||B.COL2||B.COL3 from B
    minus
    select B.COL1||B.COL2||B.COL3 from A, B
    where A.usrid = B.usrid
    group by groupid having count(*)>1其实可以把B.COL1||B.COL2||B.COL3 看成一个字段来处理~
      

  6.   

    关键是使用distinctSELECT A.COL1,A.COL2,A.COL3
    FROM TEST A,GROUP_tab B
    WHERE A.USER_ID = B.USER_ID(+)
    GROUP BY A.COL1,A.COL2,A.COL3
    having count(distinct NVL(B.GROUP_ID,0))>1
      

  7.   

    但当一个bank account只有多个不属于任何group的user_id时,我们也保留这个bank account,但上面的语句没有选出来这类bank account.
      

  8.   

    SELECT A.COL1,A.COL2,A.COL3
    FROM TEST A,GROUP_tab B
    WHERE A.USER_ID = B.USER_ID(+)
    GROUP BY A.COL1,A.COL2,A.COL3
    having count(distinct NVL(B.GROUP_ID,a.user_id))>1
      

  9.   

    SELECT A.COL1,A.COL2,A.COL3
    FROM TEST A,GROUP_tab B
    WHERE A.USER_ID = B.USER_ID
    GROUP BY A.COL1,A.COL2,A.COL3
    having count(distinct B.GROUP_ID)>1
      

  10.   

    SELECT A.COL1,A.COL2,A.COL3
    FROM TEST A,GROUP_tab B
    WHERE A.USER_ID = B.USER_ID
    GROUP BY A.COL1,A.COL2,A.COL3
    having count(distinct B.GROUP_ID)>1