SELECT     node_id, node_addr,node_type, ISNULL
                          ((SELECT     SUM(POWER(2, meter_channel)) AS Expr1
                              FROM         dbo.meter_table
                              WHERE     (meter_node_id = dbo.node_table.node_id)
                              GROUP BY meter_node_id), 0) AS node_devs
FROM         dbo.node_table用连接查询怎么优化,另外这里的Power对效率有影响吗?

解决方案 »

  1.   

    里面是不是不需要用group by 了?
      

  2.   

    select a.node_id,a.node_addr,a.node_type,isnull(SUM(POWER(2,meter_channel)),0) as Expr1
    from dbo.node_table a inner join dbo.meter_table b
    on a.node_id=b.meter_node_id
    group by a.node_id,a.node_addr,a.node_type直接写,GROUP   BY   meter_node_id和a.node_id是一样不吗?
      

  3.   

    SELECT  node_id,node_addr,node_type,SUM(POWER(2,isnull(meter_channel,0))) AS node_devs 
    FROM dbo.node_table 
    left join dbo.meter_table on node_table.node_id=meter_table.meter_node_id
      

  4.   

    跟楼上意见一样。group by没起作用。可以去掉的``
      

  5.   

    zefuzhang2008的报语法错误,不能包含非分组的node_id
      

  6.   

    SELECT  node_id,node_addr,node_type,SUM(POWER(2,isnull(meter_channel,0))) AS node_devs   
    FROM dbo.node_table   
    left join dbo.meter_table on node_table.node_id=meter_table.meter_node_id
    group by node_id,node_addr,node_type
      

  7.   

    POWER(2, meter_channel))没必要把,只要有记录的话POWER(2, meter_channel))就不会为零,当然SUM(POWER(2,isnull(meter_channel,0))也不会为零了,其实只要SELECT
           dbo.node_table.node_id,
           dbo.node_table.node_addr,
           dbo.node_table.node_type,
           ISNULL(dbo.meter_table.meter_channel, 0) AS   node_devs 
    FROM
           dbo.node_table
    left join
           dbo.meter_table 
    on
           dbo.node_table.node_id = dbo.meter_table.meter_node_id 
      

  8.   

    不好意思,没看清问题,POWER(2,   meter_channel))还是要的,不然node_devs 就不对了^_^
      

  9.   

    select 
     node_id
    ,node_addr
    ,node_type
    ,node_devs=isnull(Expr1,0)
    from dbo.node_table a
    left join (
    SELECT
     meter_node_id
    ,Expr1=SUM(POWER(2, meter_channel))
    FROM dbo.meter_table
    GROUP BY meter_node_id
    ) b on node_id=meter_node_id
      

  10.   

    可以通过执行计划可以看出,楼主你的查询要优于用left join的查询,因为left join执行了而外的排序操作,
    子查询中的group by 无任何用处,可以去掉提升性能,2表连接的字段应该都有索引吧
      

  11.   

    Power当然会影响效率,可是你又不得不用