脚本如下:
select * from TABLE1 where TABLE1_ID1 IN ( select TABLE4_ID3 from TABLE4 where TABLE4_ID1 
IN ( select TABLE3_ID1 from TABLE3 where left(CREATE_DATE , 8) >= 20050101 )具体说明:
3 个表 TABLE1、TABLE3、TABLE4 ;
TABLE1              TABLE3                         TABL4TABLE1_ID1          TABLE3_ID1  TABLE3_ID3         TABLE4_ID1
字段说明: 1、TABLE3 中 TABLE3_ID1 的记录在 TABLE4_ID1 中一定可以找到;2、TABLE3 中 TABLE3_ID3 的记录在 TABLE1_ID1 中一定可以找到;3、TABLE4_ID1 中的记录不会重复, 但是 TABLE3_ID1 的记录可能会重复;形象点按照集合大小来说就是:TABLE1_ID1 >= TABLE4_ID3
TABLE3_ID1 >= TABLE4_ID1不知道有没有说清楚,请帮忙优化下,谢谢!

解决方案 »

  1.   


    select *
      from TABLE1 T1 
      where exists (select 1 from TABLE4 T4 where T4.TABLE4_ID3=T1.TABLE1_ID1 and exists (select 1 from TABLE3 T3 where T4.TABLE4_ID1=TABLE3_ID1 and left(CREATE_DATE , 8) >= 20050101))
      

  2.   

    LS的:这样是不行的,在这里面用 T4.TABLE4_ID3=T1.TABLE1_ID1 肯定行不通的
      

  3.   

    select TABLE4_ID3 from 
    TABLE1 a inner join
    TABLE4 b on a.TABLE1_ID1=b.TABLE4_ID3 inner join 
    TABLE3 c on b.TABLE4_ID1=c.TABLE3_ID1
    where c.CREATE_DATE >= cast('20050101' as datetime)--left(CREATE_DATE , 8) >= 20050101  注意这种写法会使在这个字段的的所以不起作用
      

  4.   

    还是没有达到我的要求,我的目的:
    我最终要的是 TABLE1 中的数据,但是要根据 TABLE1 中的 TABLE1_ID1 在 TABLE4 中的 TABLE4_ID3来查的,但是 TABLE4_ID3对应的 TABLE4_ID1 又在 TABLE3 中的 TABLE3_ID1中。三个表逐个限制的;