2012-06-13 21 views
0

我需要知道我在这个sql语句中做了哪些错误。我尝试在以前的线程中找到类似问题的解决方案,但没有人能解决我的问题。所以我想也许我的声明其实是错误的。您无法在FROM子句中指定要更新的目标表'b'

UPDATE table1 b 

LEFT JOIN table2 m ON b.ICNO=m.ICNO 

SET b.SalMoveMth = '01' 

WHERE 
    m.Status!='6' AND 
    (DATE_FORMAT(startDateSand,'%m')='10' OR DATE_FORMAT(startDateSand,'%m')='11' OR 
     DATE_FORMAT(startDateSand,'%m')='12') AND 
    ((SELECT SalMoveMth FROM table1 WHERE ICNO=table2.ICNO ORDER BY SalMoveMthStDt DESC LIMIT 1)!='10'). 

谢谢。

+0

什么其实是你的问题?哪条错误消息? – glglgl

回答

0

where子句中的最后一部分:

代替:

where ICNO=table2.ICNO order by SalMoveMthStDt desc limit 1)!='10') 

尝试:

where ICNO=table2.ICNO order by SalMoveMthStDt desc limit 1)<>'10') 

也:

and b.SalMoveMth in (
((select SalMoveMth from table1 where ICNO=table2.ICNO order by 
SalMoveMthStDt desc limit 1)<>'10')) 
+0

仍然会得到相同的错误。是因为嵌套查询吗?任何解决方案? – elo

+0

@JasonR!= vs. <>不应该真的有所作为... – glglgl

+0

你可以脚本你的2表和一些数据,你有它,并发送我PLZ? –

0
update table1 
set SalMoveMth = '01' where icno in 
    (select b.ICNO from table1 b 
    left join table2 m on b.ICNO=m.ICNO 
    where m.Status!='6' 
    and (DATE_FORMAT(startDateSand,'%m')='10' or 
     DATE_FORMAT(startDateSand,'%m')='11' or 
     DATE_FORMAT(startDateSand,'%m')='12') 
    and b.SalMoveMth in (
    ((select SalMoveMth 
     from table1 
     where ICNO=table2.ICNO 
     order by SalMoveMthStDt desc limit 1)<>'10') 
) 
相关问题