一张表里字段是 month ,B ,C ,D;没有主键
要检索month 为 5 ,B 为 1的数据 。条件是 month 为 5,B 为 1的C , D 字段 和 month 为 6 B = 1的 C , D字段都不同(  T1.C <>T2.c,T1.D<>T2.D),并且(难的~~)只要month 为 5,B 为 1的某条数据的C , D字段 等于 month 为 6,B 为 1的某条数据的C , D字段时,就算 month 为 5,B 为 1的此条数据的C , D字段 不等于 month 为 6,B 为 1的其他某条数据时,也不应检索出来。这个sql或者存储过程怎么写啊,拜托各位了

解决方案 »

  1.   

    呵呵呵,welyngj兄也在看呀,我看了好久,都没有把这个条件理清楚。光描述就够复杂的了
      

  2.   

    select * from t1 m
      where m.month=5 and m.b=1
        and not exists 
        (select 1 from t1 t where t.month=6 and t.b=1
             and t.c<>m.c and t.d<>m.d)
      

  3.   

    好难描述啊,
    举例子吧:
    month |B  |C  |D |
    5      1   a   b  ...①
    5      1   a   c  ...②
    6      1   a   b  ...③
    6      1   a   d  ...④我应该检索出5月的数据是②;因为虽然①和④得C字段或D字段不同,但①和③的C字段和D字段相同,那么就不能被检索出来
    不知道描述清楚了没
      

  4.   

    5 楼,我要检索5月的数据,不是5月并且B=1的数据,因为也有B=2,3等等的数据,也要和6月相应的B=2,3等等数据比较
      

  5.   


    一定要sql做么,最好还是应用做吧。或者是procedure来做。
      

  6.   

    是不是只是5月6月的有C,D不能相同的限制,还是说不管哪个月都不能是C,D相同的?
      

  7.   

    已经解决了,用minux这个关键字就可以解决,谢谢各位
      

  8.   


    把sql贴出来,一起看看。
      

  9.   

    (select B,C,D from T1) minux (select B,C,D from T2)