2014-06-11 126 views
0

我正在使用MySQL並正在運行一個查詢,我認爲它應該起作用,但顯然我錯過了一些東西。來自子查詢的MySQL更新值

UPDATE `client` 
    SET StatementTermsID = (SELECT StatementTermsID FROM statementterms WHERE TermsDescription = 'NET 15') 
    WHERE `client`.StatementNote LIKE '%Net 15%'; 

如果我運行本身子查詢,我得到的記錄id預期:當我運行

0的記錄得到更新。如果我將子查詢更改爲靜態值,則會更新2000條記錄。任何想法,我失蹤了?

回答

1

這裏有一個不同的語法:

UPDATE `client` a, 
(SELECT StatementTermsID FROM statementterms WHERE TermsDescription = 'NET 15') b 
SET a.StatementTermsID = b.StatementTermsID 
WHERE a.StatementNote LIKE '%Net 15%'; 
+0

我用這一點,它也更新了0行...任何想法? –

+1

@VenomFangs,也許是因爲他們之前更新過? – Fabricator

+0

是的,剛剛讓另一個開發人員給我一個理智檢查,並且這些陳述正常工作......原始查詢似乎也起作用。我會刪除這個問題......因爲這是一個PEBKAC –

1

我認爲你應該使用連接。我可以看到,我們不能使用StatementTermsID,因爲那就是你想要更新的東西。所以肯定它不會在前面的表中。 如果您有任何ID加入使用,以及。

UPDATE client 
SET StatementTermsID =statementterms.StatementTermsID 
FROM client 
INNER JOIN statementterms 
    WHERE statementterms.TermsDescription = 'NET 15' AND 
    client.StatementNote LIKE '%Net 15%'; 

要不試試這個語法

UPDATE client , statementterms 
    SET client.StatementTermsID = statementterms .StatementTermsID 
WHERE statementterms.TermsDescription = 'NET 15' AND 
     client.StatementNote LIKE '%Net 15%'; 
+0

不喜歡你的聲明中的「from」 –

+0

你有沒有任何id's加入? –

+0

@VenomFangs ::我已經更新了不同的語法 –