请教这两个查询的不同点,机制是什么?select t.dummy, decode(count('1'), null,0, 1) from dual t where 1 = 0 group by t.dummy;select decode(count('1'), null,0, 1) from dual t where 1 = 0;

解决方案 »

  1.   

    你如果dual表理解不了,下面的你应该能理解了吧??create table ttt(a int);
    insert into ttt values(1);
    commit;select a, count(1) from ttt where 1 = 0 group by a;
    select count(1) from ttt where 1 = 0;
      

  2.   

    首先来看下dual是个什么东东
    1. dual 确实是一张表.是一张只有一个字段,一行记录的表. 
    2.习惯上,我们称之为'伪表'.因为他不存储主题数据.
    3. 他的存在,是为了操作上的方便.因为select 都是要有特定对象的.
    接下来看看你的语句
    1.想来让你郁闷的是第二条为什么查出来的是1,而第一条没数据,问题就出在count('1')上面,count('1')返回的值为0,你decode(count('1'),null,0,1)结果为1就可以理解了。
    2.至于第一条语句你理解了执行顺序就可以相通了。sql的执行顺序是这样子的
    from--where--group by--having--select--order by,select 在group的后面,所以第一条语句没有值。
    如果帮助到你的话,请给分呀!!!!
      

  3.   

    不是dual的问题
    count('1')应该有结果
    decode(count('1'), null,0, 1)应该处理count('1')的结果,为什么加入了分组以后反而没有结果。
    decode(count('1'), null,0, 1)为什么就没有值了呢?