2010-10-21 83 views
-1

誰能幫我,我怎麼可以更新其在WHERE子句..UPDATE和SELECT在MySQL

我的查詢看起來像這樣選擇到另一個表的一個表,但它是一個錯誤..

UPDATE empinfo e SET e.tellno='32154' 
WHERE e.empno IN (SELECT ei.empno FROM empinfo ei WHERE ei.tellno <> '123456'); 

您的迴應是高度讚賞.. :)

+2

如果您發佈錯誤,它會有很大的幫助。 – duffymo 2010-10-21 09:36:51

+0

你得到的錯誤信息是什麼?也許這與將單引號改爲雙引號一樣簡單。 :-) – 2010-10-21 09:37:25

+0

這是錯誤信息:您無法在FROM子句中指定目標表'e'進行更新 – Bryan 2010-10-21 09:55:35

回答

7

爲什麼不:

UPDATE empinfo e SET e.tellno='32154' WHERE tellno <> '123456' 
3

你爲什麼在這裏需要嵌套查詢,請嘗試直接

UPDATE empinfo e SET e.tellno='32154' 
WHERE e.tellno != '123456' 
1

出了什麼問題:

UPDATE empinfo e SET e.tellno='32154' WHERE e.tellno <> '123456'; 

UPDATE empinfo e SET e.tellno='32154' WHERE e.tellno != '123456'; 

UPDATE empinfo e SET e.tellno='32154' WHERE e.tellno NOT '123456'; 

但是,如果empno在您的表中不唯一,那麼這個SQL將不會像您提供的那樣工作!那麼,empno是獨一無二的呢?

+0

empno沒有唯一值..如果empno是唯一值,我的查詢是否可以工作? – Bryan 2010-10-21 09:57:17

+0

如果empno是唯一的,那麼無關緊要。 – 2010-10-21 11:23:25

0

不知道爲什麼我回答這個問題,因爲你的接受率是垃圾,但是這裏就是這樣。

試試這個

UPDATE empinfo SET tellno='32154' 
WHERE empno IN (
    SELECT empno 
    FROM empinfo 
    WHERE tellno NOT '123456' 
); 
+1

您不能使用where子句中正在更新的同一表中的select子查詢。 – 2010-10-21 09:43:42

+0

@Eran - 你可以但不喜歡那樣。您需要將整個子查詢包裝爲[作爲派生表](http://www.xaprb.com/blog/2006/06/23/how-to-select-from-an-update-target-in- mysql /下)。 – 2010-10-21 09:57:46

+0

@Martin有趣! – 2010-10-21 10:19:53

0

好,例如:

REC1: empno=1 tellno='654321' 
REC2: empno=2 tellno='654321' 
REC3: empno=3 tellno='123456' 
REC4: **empno=1** tellno='123456' 

當你使用類似

UPDATE empinfo e SET e.tellno='32154' WHERE e.tellno != '123456'; 

然後你會得到這樣的:

REC1: empno=1 tellno='32154' 
REC2: empno=2 tellno='32154' 
REC3: empno=3 tellno='123456' 
**REC4: empno=1 tellno='123456'** 

但是,您的原始查詢,似乎想把它改成這樣:

REC1: empno=1 tellno='32154' 
REC2: empno=2 tellno='32154' 
REC3: empno=3 tellno='123456' 
**REC4: empno=1 tellno='32154'** 

你要哪的這兩個選項?如果你想要第二個,那麼你需要做一個子選擇,但是同一個表上的子選擇對於MySQL來說是不可能的。