在MySQL中更新并选择
有人能帮我更新WHERE子句中一个有选择的表到另一个表吗 我的查询如下所示,但这是一个错误在MySQL中更新并选择,mysql,select,Mysql,Select,有人能帮我更新WHERE子句中一个有选择的表到另一个表吗 我的查询如下所示,但这是一个错误 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 e.telln
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 e.tellno != '123456'
为什么不:
UPDATE empinfo e SET e.tellno='32154' WHERE tellno <> '123456'
有什么问题吗
UPDATE empinfo e SET e.tellno='32154' WHERE e.tellno <> '123456';
或
??
但是,如果empno在您的表中不是唯一的,那么这个SQL将无法像您提供的那样工作!那么,empno是否独一无二呢?我不确定为什么我会回答这个问题,因为你们的接受率是垃圾,但这就是原因 试试这个
UPDATE empinfo SET tellno='32154'
WHERE empno IN (
SELECT empno
FROM empinfo
WHERE tellno NOT '123456'
);
好的,举个例子:
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不可能在同一个表上进行子选择。如果您发布错误,会有很大帮助。您收到的错误消息是什么?也许这就像将单引号改为双引号一样简单-这是错误消息:您不能在FROM子句中指定更新的目标表“e”。您不能使用where子句中正在更新的同一个表中的select子查询。@Eran-您可以,但不能这样做。您需要将整个子查询包装起来。当您更新一个表时,是否可以在同一个表上选择更新查询的WHERE子句?empno没有唯一的值。。如果empno是唯一值,我的查询是否有效?
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'**