select barcode1,comp from TABLE1 where Printed=1 and rownum=1假如表中有好几项Printed=1,这个SQL语句怎样执行。
先谢谢好心人帮忙。

解决方案 »

  1.   

    执行结果:只取一条printed=1的记录
      

  2.   

    rownum 是针对结果集的过滤,用于取前面第几条数据
      

  3.   

    先where Printed=1
    然后rownum=1但从效率上考虑,最好写成rownum<2
      

  4.   

    那就是说假如barcode1 comp Printed
                  1        1   1
                  2        2   1
                  3        3   1
    是只取1,1,1那行吗?
      

  5.   

    你要先排序,再取rownum =1 否则查询的结果不是你所要的数据
      

  6.   

    排序?如何排序?程序里sql语句就是这么写的啊?也没有排序的语句啊
      

  7.   


    不能保是是1,1,1那行。可以这样写:select * from (select * from t where printed = 1 order by barcode1) where rownum = 1;
      

  8.   

    那假设数据库定义了主键是时间的话,那是不是时间最早出现printed = 1的那项。
      

  9.   

    在不排序的情况下,其查询结果是不规则的,没有什么规律可寻,rownum=1,只取第一行,不过根据一般来看是存在一点点按录入的先后顺序(但并不是通用的)
      

  10.   

    只取一条printid=1的记录,至于取哪一条,跟时间无关,只跟你这个查询的取数方式有关,取到的第一条记录就是rownum=1。看下面这个例子
     create table c (id int,sign varchar2(10));
     create index inx_c on c(id);
      insert into c values(1,'a');
      insert into c values(1,'b');
      insert into c values(1,'c');
      insert into c values(1,'d');第一个查询:select /*+ full(c) */* from c where id=1 and rownum=1;结果:1,a
    第二个查询:select /*+index_desc(c)*/ * from c where id=1 and rownum=1 ;结果:a,d两种查询结果不一样,第一种用全表扫描的方式,一般按照rowid升序取数,第二种用索引降序的方式,按照索引值的降序取数,所以LZ你用这种方式取的数结果是不一定的。