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');
您的回应是高度赞赏.. :)
为什么不:
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是独一无二的呢?
empno没有唯一值..如果empno是唯一值,我的查询是否可以工作? – Bryan 2010-10-21 09:57:17
如果empno是唯一的,那么无关紧要。 – 2010-10-21 11:23:25
不知道为什么我回答这个问题,因为你的接受率是垃圾,但是这里就是这样。
试试这个
UPDATE empinfo SET tellno='32154'
WHERE empno IN (
SELECT empno
FROM empinfo
WHERE tellno NOT '123456'
);
您不能使用where子句中正在更新的同一表中的select子查询。 – 2010-10-21 09:43:42
@Eran - 你可以但不喜欢那样。您需要将整个子查询包装为[作为派生表](http://www.xaprb.com/blog/2006/06/23/how-to-select-from-an-update-target-in- mysql /下)。 – 2010-10-21 09:57:46
@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来说是不可能的。
如果您发布错误,它会有很大的帮助。 – duffymo 2010-10-21 09:36:51
你得到的错误信息是什么?也许这与将单引号改为双引号一样简单。 :-) – 2010-10-21 09:37:25
这是错误信息:您无法在FROM子句中指定目标表'e'进行更新 – Bryan 2010-10-21 09:55:35