與下面Sybase等價的MySQL語句該怎麼寫啊?
  update q_templet 
  set p_id = null 
  where test_id in
  (
    SELECT test_id FROM q_templet WHERE e_hold_dt <= '2007-11-21' and templet_status = 1
  )
MySQl不支持這種語句,請求各位高手幫忙解決,急啊!
另外,我為了防止紀錄太多,in()超過長度,所以嘗試用零時表,結果這條Mysql語句又執行不了,郁悶!
create table q_templet_temp (id int);
 insert into q_templet_temp values
 (
    SELECT test_id FROM q_templet WHERE e_hold_dt <= '2007-11-21' and templet_status = 1
 )
這又是如何,感覺Mysql用起來有點不利索啊....

解决方案 »

  1.   

       
        create temporary table tmp select * from q_templet;
        update   q_templet, tmp
        set   q_templet.p_id   =   null  
        where   q_templet.test_id   in
        (
            SELECT   tmp.test_id   FROM   tmp   WHERE   tmp.e_hold_dt   <=   '2007-11-21 '   and   tmp.templet_status   =   1
        ) 
        
      

  2.   

    update   q_templet   
        set   p_id   =   null   
        where   test_id   in 
        ( 
            SELECT   test_id   FROM   q_templet   WHERE   e_hold_dt   <=   '2007-11-21'   and   templet_status   =   1 
        ) 
    MYSQL可以执行啊 。版本低了吧 ?
      

  3.   

        update   q_templet  
        set   p_id   =   null  
        where   test_id   in
        (
            SELECT   test_id   FROM   q_templet   WHERE   e_hold_dt   <=   '2007-11-21'   and   templet_status   =   1
        ) 
    看你的这条SQL真晕啊,update和子查询都是同一个表q_templet的,那干嘛还要写成这样,直接这样:
        update   q_templet  
        set   p_id   =   null  
        WHERE   e_hold_dt   <=   '2007-11-21'   and   templet_status   =   1如果是要多表更新,看我发过的帖子,里面我提到了三个方法,你都试试
    http://topic.csdn.net/u/20071218/11/69071e9f-085d-4087-890c-c9880cc963ec.html
    推荐三个中的第一个