下表table1(mydql4.0数据库,不支持interset和子查询)
run_id   item_id  item_data
01        011     2008-12-01
02        012     未到货
03        013     NULL
04        014     2008年9月1日   
查询出当前日期大于item_id=011的item_data日期,并且item_id=013的item_data记录为空的记录我是这样写的 select * from table1 where item_id=011 and to_days(now()) > to_days(item_data)  and item_id=013 and item_data=''   当然我这个语句是错的,我只是明确这个意思,就是同时满足一个字段里的两个属性,数据库不支持子查询,也不支持intersect交集,请高手指教

解决方案 »

  1.   

    既然不支持子查询,那这句只能分成两句来写,第一句获得item_id为011 的 item_data,第二句去查这个大于该日期或item_id为013且item_data为空的记录.否则你无法确定第一个条件.
      

  2.   


    分成两个句子就没有作用了,是要他们的交集,这两个句子也要是and的关系,而且是同一字段,该版本数据库不支持inersect
      

  3.   

    同时满足一个字段里的两个属性:一般用EXISTS来解决
      

  4.   

    EXISTS也属于子查询,而且我的问题,这个判断不存在也没用呀,大家不防从存储过程临时表的角度帮我想想,另外,存储过程是写在PHP程序里,还是怎么样从数据库执行?
      

  5.   

    你完全可以把item_id = 011的记录省略掉。
    select * from table1 where and item_id=013 and item_data='' and to_days(now()) > to_days(item_data);
    item_id建个索引就可以了。
      

  6.   


    楼上的那个语句肯定不行的,item_id=13已经对应的item_data=''了,item_id=014对应的item_data已经没有了,你再看看我上面的数据表结构