Mysql根据另一个表插入多条记录

标签 mysql sql

我有

Table User with fields: Id, Name
Table Template with fields: Id, DefaultField, user_id

对于用户中的每个 Id,我需要向模板表添加 3 个默认行。 示例:

User Table has:
1   |  "John Doe"
2   |  "Alan Smith"

在我的模板表中我应该有

1  | "Name" | 1
2  | "Email" | 1
3  | "Contact Number" | 1
4  | "Name" | 2
5  | "Email" | 2
6  | "Contact Number" | 2

我希望执行以下操作,但如果执行第一个查询,第二个查询将无法工作

INSERT INTO template (name, user_id)
SELECT 'Name', id
FROM user
WHERE id NOT IN (SELECT DISTINCT user_id FROM template)

INSERT INTO template (name, user_id)
SELECT 'Email', id
FROM user
WHERE id NOT IN (SELECT DISTINCT user_id FROM template)

INSERT INTO template (name, user_id)
SELECT 'Contact Number', id
FROM user
WHERE id NOT IN (SELECT DISTINCT user_id FROM template)

最佳答案

听起来应该是CROSS JOIN

insert into template (name, user_id)
select t.name, u.id
from user u cross join (
    select 'Name' name union all
    select 'Email' name union all
    select 'Contact Number' name
) t where not exists (
    select 1
    from template z
    where u.id = z.user_id
);

如果你是第一次这样做,并且模板表中没有记录,那么你可以去掉上面的 where 子句。

关于Mysql根据另一个表插入多条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42103664/

相关文章:

javascript - 迭代包含 mysql 数据的变量(使用 JavaScript)

mysql - 不唯一的表/别名 (42000)

sql - 通过为无法从合并表派生值的列插入空值来合并表?

mysql - 800万条记录查询性能

sql - 在 SQL 中使用 LIMIT/OFFSET 进行分页有时会导致不同页面上出现重复项

mysql - 带左连接的sql最小值

php mySQL pdo auto_increment 行的主键

php - 使用 php 将嵌套 JSON 导入到具有关系的 MySQL

sql - 有条件截断

c# - 尝试从列序号 '0' 读取无效