UPDATE和SELECT在MySQL

问题描述:

谁能帮我,我怎么可以更新其在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

为什么不:

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

你为什么在这里需要嵌套查询,请尝试直接

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 != '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

不知道为什么我回答这个问题,因为你的接受率是垃圾,但是这里就是这样。

试试这个

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

好,例如:

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来说是不可能的。