本帖最后由 wobisemose 于 2012-03-19 13:06:15 编辑

解决方案 »

  1.   


    select count(1)
    from tab2
    inner join tab1 on tab1.id=tab2.id
    where months_between(sysdate,tab2.birthday)/12>65
      

  2.   

    SELECT COUNT(1)-- COUNT(*)个人习惯是count(1)或者具体的count(fieldName)
    FROM tab1
    INNER JOIN
      (SELECT id FROM tab2 
      WHERE months_between(sysdate,tab2.birthday)>65*12
      --比较符左边尽量不使用计算
      --WHERE months_between(sysdate,tab2.birthday)/12>65  
      )e
    ON tab1.id=e.id;
      

  3.   

    如果tab2.birthday有索引的话,这样用months_between(sysdate,tab2.birthday)/12>65的话,可能会用不到索引,影响查询速度。
      

  4.   

    可以改成这样:
    tab2.birthday < sysdate - INTERVAL '780' MONTH(3)
      

  5.   

    1,count(*)-->count(1)
    2,子查询不要用
    3,对列不要使用函数,可以对常量使用函数
    4,推荐sql:
      select id from tab1 
      intersect 
      select id from tab2
      id要是key,那就等OK了
      

  6.   

    效率问题,这个具体的需求和数据有关。如果出的结果记录不同,sql写法不同。