Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.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_Sql - Fatal编程技术网

Mysql 如何使用查询结果更新单个列的值?

Mysql 如何使用查询结果更新单个列的值?,mysql,sql,Mysql,Sql,我无法在mysql中使用此查询: UPDATE proyects_c SET director=(SELECT users.keyid FROM users,proyects WHERE users.username=proyects.director ); 现在的问题是子查询返回多行。事实是,这就是我想要的。它返回的行数与proyects_c中的行数相同,因此我希望它使用查询

我无法在mysql中使用此查询:

UPDATE proyects_c 
   SET director=(SELECT users.keyid 
                   FROM users,proyects 
                  WHERE users.username=proyects.director
                );
现在的问题是子查询返回多行。事实是,这就是我想要的。它返回的行数与proyects_c中的行数相同,因此我希望它使用查询结果更新列director中的每一行

但是我得到了一个错误:

ERROR 1242 (21000) at line 23: Subquery returns more than 1 row
这是有道理的,但我不能让它做我想做的。我做错了什么


作为第二个问题,我如何将其分为两个查询?为了清楚起见。

可能是这样的:

update proyects_c p
inner join users u on
    u.username = p.director
set p.director = u.keyid
您需要在T-SQL中的select中指定“Top 1”,或者在MySQL中指定“LIMIT 1”(如果内存可用),以便只返回一行

Try(假设为T-SQL):


我做了一些事情来绕过这个问题。这个想法是奥斯卡·佩雷斯给我的。我所做的是在proyects_c(admin_id)中添加了一列。完成后,我使用了以下查询:

UPDATE proyects_c, users SET proyects_c.admin_id=users.keyid WHERE proyects_c.director=users.username;

这是我想要的。之后,我删除了director列,并将admin_id重命名为director。我想做的是将director的类型从字符串更改为int-in,并添加user.keyid中的int值,该值对应于director中的名称(字符串)。这对我来说很有效。Oscar让我意识到我想要修改的行和查询结果中的行之间的唯一关系是位置。我这样做是为了使关系在两个不同的领域是一个相等的值。感谢您的帮助。

如果users.keyid返回多个值怎么办?错误本身就是这么说的。你想让它做什么?检查这个。在
项目中是否有主键?或者将每一行复制到
proyects
?我想做的是将值从查询结果复制到每一行(关系是位置,即第一个结果到第一行,第二个结果到第二行,依此类推)到列控制器中的每一行
UPDATE proyects_c, users SET proyects_c.admin_id=users.keyid WHERE proyects_c.director=users.username;