表A (有5条记录如下),表B字段1
aaa
null
null
null
bbb语句:select isnull(字段1,(select top 1 某字段 from 表B)) from 表A请问这样写 子语句 (select top 1 某字段 from 表B) 会被执行3次?还是1次?
是否有必要将子语句提出来单独写求出结果。oracle的nvl也是一样需要么?

解决方案 »

  1.   


    如果是仅仅执行1次,那我干嘛要拿出来写
    而且如果表A要是没有null字段 我那样写1次都不会被执行吧。
    拿出来反而要执行一次。最好是能从原理上。。
      

  2.   

    select coalesce(字段1,(select top 1 某字段 from 表B)) from 表A
      

  3.   

    从执行计划上看,“select top 1 某字段 from 表B”查询只会执行一次,并将其结果集与表 A 执行关联操作。不过,先提取“select top 1 某字段 from 表B”查询结果,会有更好的性能。
    declare @s varchar(100);
    select top 1 @s=某字段 from 表B;
    select isnull(字段1,@s) from 表A;