我有一个'用户'包含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,它使用相同的数据更新每个条目。我希望他们每个人都是独一无二的。
答案 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