两个表请看 "Persons" 表:
name    banji  shunxu
yiyang   01     1
yiyang   02     1
lili     01     2
  
接下来请看 "xueke" 表:name    kemu       shunxu
yiyang  01-yingyu    1
yiyang  01-shuxue    1
yiyang  02-yingyu    1
lili    01-yuwen     2第一个表每个学生有两条记录,也可能一条,第二个表就有多个记录与之对应
我现在想取出第一个表中的姓名,第二个表中所有的记录,如果用join就double记录了。select a.name,b.kemu from persons a,xueke b where a.name = b.name order by shunxu
这样记录就双倍。用union的话不能和order by同时使用,请大家帮忙

解决方案 »

  1.   

    order by可以放到最后或者加一个子查询啊..
      

  2.   

    select a.name,b.kemu,B.SHUNXU 
    from (SELECT DISTINCT NAME FROM persons ) a,
    xueke b 
    where a.name = b.name 
    order by B.shunxu
      

  3.   

    xueke表里本身就有name了,应该只是对照看表persons里是否有记录吧..SELECT NAME, kemu, shunxu
      FROM xueke a
     WHERE EXISTS (SELECT '*'
                     FROM persons b
                    WHERE b.NAME = a.NAME)
      

  4.   

    select * from (select a.name,b.kemu from persons a,xueke b where a.banji='01' and a.name =b.name order by a.shenxu) from a 
    union
    select * from (select a.name,b.kemu from persons a,xueke b where a.banji='02' and a.name =b.name order by a.shenxu) from b不知道这种语句执行效率怎么样,一次读几万条有没有问题  
      

  5.   

    xueke表里本身就有name了,应该只是对照看表persons里是否有记录吧..SQL codeSELECT NAME, kemu, shunxu
      FROM xueke a
     WHERE EXISTS (SELECT '*'
                     FROM persons b
                    WHERE b.NAME = a.NAME)shunxu在第二个表是没有的,不好意思
      

  6.   

    WITH persons AS
       (SELECT 'yiyang' NAME,'01' banji,1 shunxu FROM dual
        UNION ALL
        SELECT 'yiyang' NAME,'02' banji,1 shunxu FROM dual
        UNION ALL
        SELECT 'lili' NAME,'01' banji,2 shunxu FROM dual),
        xueke AS
        (SELECT 'yiyang' name,'01-yingyu' kemu FROM dual
         UNION ALL
         SELECT 'yiyang' name,'01-shuxue' kemu FROM dual
         UNION ALL
         SELECT 'yiyang' name,'02-yingyu' kemu FROM dual
         UNION ALL
         SELECT 'lili' name,'01-yuwen' kemu FROM dual)
    SELECT a.NAME,b.kemu FROM 
       (SELECT DISTINCT NAME,shunxu FROM persons ORDER BY shunxu) a,
       xueke b
    where a.name = b.NAME
    ORDER BY a.shunxu;
      

  7.   

    不同班级?distinct?不太明白
    select a.name,b.kemu from persons a,xueke b where a.name = b.name
      and b.kemu like a.banji||'%' order by shunxu
      

  8.   

    以A或B开头怎么写,sqlserver 是like '[AB]%',oracle呢,不要用or
      

  9.   

    10g以上用正则
    regexp_like(Colname,'^[A|B]') 
      

  10.   

    10g 正则 regexp_like(table_name,'^A|^B')
      

  11.   


    SQL> edi
    已写入 file afiedt.buf  1* select a.name,kemu from xueke a where exists(select 1 from Persons b where a.name=b.name)
    SQL> /NAME     KEMU
    -------- --------------------
    yiyang   02-yingyu
    yiyang   01-shuxue
    yiyang   01-yingyu
    lili     01-yuwenSQL> 
      

  12.   

    为什么没有引入学号字段呢?用名字重复肯定很多,而且现有模式sql执行效率不会很高
      

  13.   

    select b.* from xueke b inner join (select distinct name from persons) a
    on a.name=b.name
      

  14.   

    本QQ群新建
      希望能和大家一起探讨oracle各方面的问提
        QQ群号:54775466
        QQ群号:54775466
       期待你的加人
                积极讨论者 爱好者进
                          本群欢迎您的到来。
      

  15.   

    其实如果只是单纯要过滤重复元组的话,一个DISTINCT我想就可以搞定,但是关键是业务问题在那里?我不知道是否是只想过滤重复元组,如果是的话,上面有很多答案,用DISTINCT或者UNION都可以解决,当然对于不同的数据量,SQL稍微修改可以适当提高效率。另外,那条SQL可能不仅仅是哪里有问题,因为两个表都有shunxu字段,ORDER BY的时候我不是很明确要用那个表的shunxu字段过滤,我这里假设是要用xueke表的shunxu字段排序说下,因为发现前者只需要稍微修sql即可,如果要以前者排序再说吧。两个班级里面存在同名的人,那么本来就是两条记录的呢,除非在xueke表内部也有标志班级的字段,这里没有给出,通过上述观察,我只能得出一个结论,那就是:Persons的banji字段 是 xueke表的kemu字段的前缀,若真是这样。关联条件我们稍微修改一下:
    select a.name,b.kemu 
     from persons a,xueke b 
     where a.name = b.name and b.kemu LIKE a.banji||'%' 
     order by b.shunxu;
    对于你说的UNION和ORDER BY不能同时使用,那么你包一层就可以了:
    SELECT name,kemu FROM(
      select a.name,b.kemu,b.shunxu
       from persons a,xueke b 
       where a.name = b.name and b.kemu 
     UNION
     SELECT null,null FROM persons  WHERE 1=2)
    ORDER BY shunxu;如果要用DISTINCT:
    SELECT a.name,b.kemu 
    FROM (SELECT DISTINCT name FROM persons) a,xueke b
    WHERE a.name=b.name
    ORDER BY b.shunxu
      

  16.   


    使用UNION的SQL稍微修改下,有点点问题:
    SELECT name,kemu FROM(
      select a.name,b.kemu,b.shunxu
      from persons a,xueke b  
      where a.name = b.name and b.kemu  
     UNION
     SELECT null,null,null FROM persons WHERE 1=2)
    ORDER BY shunxu;
      

  17.   

    select a.name,b.kemu,B.SHUNXU  
    from (SELECT DISTINCT NAME FROM persons ) a,
    xueke b  
    where a.name = b.name  
    order by B.shunxu