select * from t_user where username in('admin','admin');数据库存了一条admin这样查询会返回一条记录,我想返回两条同样的记录怎么查? 

解决方案 »

  1.   


    select * from t_user where username ='admin'
    union
    select * from t_user where username ='admin'
      

  2.   

    SELECT * FROM (select * from t_user where username ='admin' ) CONNECT BY ROWNUM <3
      

  3.   

    想要多少条就修改:ROWNUM <3中的数字
      

  4.   

    select * from t_user where username in('admin','admin') 
    union all select * from t_user where username in('admin','admin');
      

  5.   

    没明白我的意思,我还想要其它的记录呢,如select * from t_user where username in('admin','admin','test','test1'); 这样我想返回四条记录,怎么弄
      

  6.   

    select *
    from t_user 
    where username in ('1','2','1')
    connect by rownum<=(length(',1,2,1,')-length(replace(',1,2,1,',','||username||',','')))/length(','||username||',')
      

  7.   


    收藏!Robin_Ares写的SQL真XXX的出神入化!!!不得不使用感叹词。
      

  8.   

    一条记录为什么要返回两条?..如果真有这种需求不如在另外建立一张和t_user一样的新表
      

  9.   

    Robin_Ares,给讲解讲解的SQL如何:)
      

  10.   

    基本原理就是楼上说的,rownum<=?
    但是?是多少需要自己算
    我的想法是 (字符串长度-字符串replace指定字段的长度)/指定字段的长度,就是指定字段有多少个
    加那么多','是因为无法区分1和11这样的长度思路是这样的,要是有问题的话你可以自己改一下
      

  11.   

    仔细想了想,这么做不行换這种吧
    with TEST_ABC as (
        select '1,2,2' b from dual
    )
    SELECT SUBSTR(',' || B || ',',
                    INSTR(',' || B || ',', ',', 1, RN) + 1,
                     INSTR(',' || B || ',', ',', 1, RN + 1) -
                      INSTR(',' || B || ',', ',', 1, RN) - 1) "NEW_B"
          FROM TEST_ABC,
               (SELECT ROWNUM RN
                  FROM ALL_OBJECTS
                 WHERE ROWNUM <= (SELECT MAX(LENGTH(B) - LENGTH(REPLACE(B, ',', '')))
                                   FROM TEST_ABC) + 1) OB
       WHERE INSTR(B || ',', ',', 1, RN) > 0;结果
    new_b
    1
    2
    2然后和你的表直连即可