Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MySQL中更新并选择_Mysql_Select - Fatal编程技术网

在MySQL中更新并选择

在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

有人能帮我更新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.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'**