MySQL在单次查询中插入多行连接的重复密钥更新

MySQL在单次查询中插入多行连接的重复密钥更新,mysql,Mysql,我在研究这个问题:还有这个: 我的问题是两者的结合 基本上,我试图做的是UPDATE使用不同值的多行,我想加入另一个表来检查当前登录的用户是否允许更新这些行 如果我理解正确,我无法使用: UPDATE beautiful JOIN employees on employees.id = beautiful.employee SET name='$name', age='$age' WHERE employees.company = '$company' 因为我不能为每一行插入不同的值 我

我在研究这个问题:

还有这个:

我的问题是两者的结合

基本上,我试图做的是
UPDATE
使用不同值的多行,我想
加入另一个表来检查当前登录的用户是否允许
更新这些行

如果我理解正确,我无法使用:

UPDATE beautiful 
JOIN employees on employees.id = beautiful.employee  
SET name='$name', age='$age'
WHERE employees.company = '$company'
因为我不能为每一行插入不同的值

我在重复密钥更新时使用了
INSERT
,记住不会插入新行,只会更新现有行

INSERT INTO beautiful (employee,name, age)
      VALUES
      (1,'Helen', 24),
      (2,'Katrina', 21),
      (3,'Samia', 22),
      (4,'Hui Ling', 25),
      (5,'Yumie', 29) 
ON DUPLICATE KEY UPDATE
       name= VALUES(name), age = VALUES(age)
问题是,如果我理解正确,使用
INSERT
时,如果我从
SELECT
语句
INSERT
,我只能
加入

但是如果我使用
SELECT
语句,例如:

INSERT INTO beautiful (employee,name, age)
SELECT '1','Helen', '24'
FROM beautiful
JOIN employees on employees.id = beautiful.employee and employee.company = '$company'
ON DUPLICATE KEY UPDATE
name= VALUES(name), age = VALUES(age)
我又回到了只能更新一行的问题上,因为在
SELECT
语句中不能使用多组文字值


如何使用不同的值更新多行并将每行连接到另一个表中?

您应该使用Union all:

INSERT INTO beautiful (employee,name, age)
SELECT * from 
FROM (
select '1','Helen', '24' 
union all
select '2','Katrina', '21' 
) beautiful
JOIN employees on employees.id = beautiful.employee and employee.company = '$company'
ON DUPLICATE KEY UPDATE
name= VALUES(name), age = VALUES(age)

您还可以使用PHP使union all语法-例如:内爆('union all',$array_of_selects)

太棒了,我不记得两年前我是如何解决这个问题的,但我会记住这一点!