一张表里有记录,其中有一个字段是编号,是人工输入的,比如1001,1002,1003,1004,但是可能有些不连续,比如1004后面是1006,1005没有输入,现在要做一个查询,不但要查询出这个表里所有记录,而且那些编号没有的比如1005也要显示在查询结果里,只是其他字段都为空,用一个select语句能查出来么?

解决方案 »

  1.   

    with tt as (
      select 1001 id, 'kyte' name from dual union all
      select 1002 id, 'byte' name from dual union all
      select 1003 id, 'cyte' name from dual union all
      select 1005 id, 'fyte' name from dual union all
      select 1007 id, 'eyte' name from dual)
    SELECT a.id, b.name
      FROM (SELECT (SELECT MIN(id) FROM tt) + LEVEL - 1 id
              FROM dual
            CONNECT BY LEVEL <= (SELECT MAX(id) - MIN(id) + 1 FROM tt)) a,
           tt b
     WHERE a.id = b.id(+)
     ORDER BY a.id;
      

  2.   

    没有写死啊,with部分只是例子数据
    如果你自己建表,你可以将表名和字段替换成自己的,使用select部分就行了
    SELECT a.id, b.name
      FROM (SELECT (SELECT MIN(id) FROM tt) + LEVEL - 1 id
              FROM dual
            CONNECT BY LEVEL <= (SELECT MAX(id) - MIN(id) + 1 FROM tt)) a,
           tt b
     WHERE a.id = b.id(+)
     ORDER BY a.id;