根据另一个查询的结果为新ID插入重复行

时间:2013-05-09 13:26:30

标签: mysql sql

所以我会尽力描述我正在尝试构建的查询。

我有一个表格,我将其称为 user_records ,其中包含一些关系ID的数据(多行),例如userId(来自表用户)。对于每一行,我需要为另一个用户复制每一行。我知道我可以运行这个:

INSERT INTO user_records (userId, column1, column2, ...)  
SELECT 10 as userId, column1, column2...  
FROM user_records 
WHERE userId = 1  

这会将userId 1的现有行复制到userId 10。

但我想为所有处于活动状态但尚未存在于此表中的userId运行此命令。所以我想先基本执行这个查询:

SELECT userID  
FROM users  
WHERE users.active = 1  
AND NOT EXISTS (  
SELECT * FROM user_records 
WHERE users.userId = user_records.userId)

使用JOINS或简单地组合2个查询,我可以运行此查询并替换前一个查询中的10,以便它复制一系列userIds的行吗?

提前致谢!

1 个答案:

答案 0 :(得分:1)

一种方法是创建CROSS JOIN

insert into user_records (userId, column1)
select u.userId, ur.column1
from user_records ur
  cross join users u 
where ur.userId = 1
  and u.active = 1
  and u.userId not in (select userId from user_records);

SQL Fiddle Demo

这将为表中不存在的每个userId在user_records中插入新行,从UserId 1复制数据。