日期:2014-05-16  浏览次数:21187 次

這個超級難的MySQL語句該如何寫呢?
與下面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用起來有點不利索啊....

------解决方案--------------------
SQL code

    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
    )

------解决方案--------------------
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可以执行啊 。版本低了吧 ?
------解决方案--------------------
这人发了帖子就跑了 :(
------解决方案--------------------
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
推荐三个中的第一个