简体   繁体   English

用子查询更新MySQL中的表

[英]Update table in MySQL with subquery

I would like to update my table with WHERE clause equals to result in my Subquery as you can see in the query below. 我想用WHERE子句等于更新我的表以产生我的子查询,你可以在下面的查询中看到。 The result after executing of query should be that the row with name Robert will have value to 1 执行查询后的结果应该是名为Robert的行的值为 1

CREATE TABLE `table1`(
  `name` varchar(30),
  `surname` varchar(30),
  `nextname` varchar(30),
  `value` bit(1)
);



INSERT INTO `table1` 
VALUES
  ('Daniel', 'Hanks', 'Robert', 0),
  ('Robert', 'Pitt', 'Angelina', 0),
  ('Angelina', 'Jolie', 'Monica', 0),
  ('Monica', 'Red', null, 0);



UPDATE `table1` SET `value` = 1 
WHERE `name` IN (SELECT `nextname` FROM `table1`
WHERE `name` = 'Daniel')¨

Thanks 谢谢

You can't UPDATE and SELECT from the same table in one query. 您不能在一个查询中从同一个表中更新和SELECT。 But MySQL does support UPDATE with JOIN syntax: 但MySQL确实支持UPDATE和JOIN语法:

UPDATE table1 AS t1
INNER JOIN table1 AS t2 ON t1.name = t2.nextname
SET t1.value = 1 
WHERE t2.name = 'Daniel'

You can also do it with an ugly trick: 你也可以用一个丑陋的把戏来做:

UPDATE `table1` SET `value` = 1 
WHERE `name` IN (SELECT `nextname` FROM(SELECT `nextname` FROM `table1`
WHERE `name` = 'Daniel')x)

Your syntax for using a subquery in the WHERE clause is correct. 在WHERE子句中使用子查询的语法是正确的。 However what are you trying to do exactly? 不过你想要做什么呢? You can achieve the same result without the subquery. 没有子查询,您可以获得相同的结果。

UPDATE `table1` SET `value` = 1 WHERE `name` = 'Daniel'

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM