2013-02-20 63 views
0

一個(據說)簡單的更新結果並不那麼簡單。無論我從其他回答問題,嘗試這句法,我從MySQL獲得相同的響應:(S)MySQL加入更新

0行受影響的行匹配:124:0的警告:0

嘗試1:

UPDATE news_content, news_map 
SET news_content.active='no' 
WHERE news_content.rowID = news_map.newsID 
AND news_map.catID = 170; 

嘗試2:

UPDATE news_content 
LEFT JOIN 
    news_map 
ON  news_map.newsID = news_content.rowID 
SET  news_content.active = 'no' 
WHERE news_map.catID = 170; 

嘗試3:

UPDATE 
news_content nc JOIN 
news_map nm 
    ON nm.newsID = nc.rowID 
    AND nm.catID = 170 
SET nc.active = 'no'; 

您認爲哪些方法可行?

+0

所有的語法都應該正常工作。你可以提供樣本記錄嗎?再次檢查值。 – 2013-02-20 13:36:01

+0

'SELECT COUNT(*)FROM news_content nc JOIN news_map nm ON nm.newsID = nc.rowID WHERE nm.catID = 170 AND(nc.active <>'no'OR nc.active IS NULL);'返回? – 2013-02-20 15:36:47

+0

@ypercube,它返回19 – walkerspace 2013-02-20 16:30:10

回答

0

是否有這個返回任何行:

select * 
from news_content 
LEFT JOIN 
    news_map 
ON  news_map.newsID = news_content.rowID 
WHERE news_map.catID = 170 
+0

我認爲這應該是一個評論':)' – 2013-02-20 13:39:33

+0

@JW。是的),但如何添加評論而不是答案? – shibormot 2013-02-20 13:41:31

+0

是的,它返回124行。 – walkerspace 2013-02-20 14:29:54

1

可能是一個愚蠢的問題,但確實已經news_content.active等於「不」?

+0

有105'不'和19'是'。 – walkerspace 2013-02-20 14:30:56

+0

最可能的原因。要更新的行已經有'active ='no''(與其他DBMS相比,MySQL不會檢查)。 – 2013-02-20 16:15:43

0

試試這個:

UPDATE news_content 
SET active='no' 
WHERE rowID IN (SELECT m.newsID FROM news_map m WHERE m.catID = 170); 

我更喜歡使用子查詢,而不是JOIN上更新,一般來說,因爲它是一個比較標準的方式。