MYSQL:基于另一个表的SELECT更新行

时间:2015-11-30 18:16:57

标签: php mysql sql

我有一个'用户'包含100个条目的表格,每个条目都有一个空的' first_name'柱。我希望用另一个表中的名称更新其中的每一个。它们不需要对应,它们可以是随机的,我只需要从一个表到另一个表的数据。我发现其他人也提出了类似的问题,但他们似乎都有相应的列,例如"用户名"在任何一个表中都是相同的,并且可以使用JOIN ON使其工作。由于没有相应的列,我无法做到这一点。

我目前尝试过以下无法解决的问题:

UPDATE users
SET first_name =
  (
   SELECT `user_firstname`
   FROM past_users
   WHERE `active` = '1' LIMIT 100
  )

这给出了错误:

Subquery returns more than 1 row

它的唯一工作方式是使用LIMIT 1,它使用相同的数据更新每个条目。我希望他们每个人都是独一无二的。

2 个答案:

答案 0 :(得分:1)

好吧,也许这个概念。以下只是一个例子。使用随机,并限制1。

模式

create table user
(   userId int auto_increment primary key,
    firstName varchar(50) not null
    -- etc
);

create table prevUser
(   userId int auto_increment primary key,
    firstName varchar(50) not null,
    active int not null
);

-- truncate table user;
-- truncate table prevuser;
insert user(firstName) values (''),(''),(''),(''),(''),(''),(''),(''),('');

insert prevUser(firstName,active) values 
('user1prev',0),('snickers bar',1),('Stanley',1),('user4prev',0),('zinc',1),
('pluto',1),('us7545rev',0),('uffallfev',0),('user4prev',0),('tuna',1),
('Monty Python',1),('us4 tprev',0),('mouse',1),('user4prev',0),('Sir Robin',1),
('lizard',1),('Knights that says, Nee!',0),('mayo',1),('656user4prev',0),('kiwi',1);

查询(与您的类似)

UPDATE user
SET firstName =
  (
   SELECT firstName
   FROM prevUser
   WHERE `active` = '1'
   order by rand()
   limit 1
  )

结果

select * from user;
+--------+--------------+
| userId | firstName    |
+--------+--------------+
|      1 | snickers bar |
|      2 | tuna         |
|      3 | mouse        |
|      4 | Sir Robin    |
|      5 | mouse        |
|      6 | mayo         |
|      7 | lizard       |
|      8 | snickers bar |
|      9 | pluto        |
+--------+--------------+

答案 1 :(得分:0)

你需要这样的东西:

UPDATE users 
JOIN past_users ON past_users.user_id = users.id AND past_users.`active` = '1'
SET users.first_name = past_users.user_firstname