所以我会尽力描述我正在尝试构建的查询。
我有一个表格,我将其称为 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的行吗?
提前致谢!
答案 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);
这将为表中不存在的每个userId在user_records中插入新行,从UserId 1复制数据。