mysql - 如何从两个查询将数据插入关系表

标签 mysql outer-join insert-into

不确定如何写问题。

我有这 3 个表:

PICTURES
id
name

MATERIALS
id
name

PICTURES_MATERIALS
picture_id
material_id

我有数千张图片和5种 Material ,并且大多数图片都有所有 Material 。 使用此查询,我发现大约 100 张图片没有任何素材。

select p.id, p.name
from pictures as p
left outer join pictures_materials as pm on p.id = pm.picture_id
where pm.picture_id is null;

我现在想做的是在 pictures_materials 中为每张图片和每种 Material 插入一行。 那么,假设这些是一些没有素材的图片:

picture_21, picture_22, picture_23

我想要:

picture_21 material_1
picture_21 material_2
picture_21 material_3
picture_21 material_4
...

是否可以在单个 INSERT INTO 查询中执行此操作?

最佳答案

Is it possible to do this in a single INSERT INTO query?

是的!

您已经找到了创建笛卡尔积的一个正当理由。为此,您将使用CROSS JOIN。尝试这个查询。

-- insert into picture_materials
select dt.id, m.id 
from (select p.id
from pictures as p
left outer join pictures_materials as pm on p.id = pm.picture_id
where pm.picture_id is null) dt 
cross join materials

验证 Select 语句返回所需数据后,取消注释 INSERT 语句并再次执行。

关于mysql - 如何从两个查询将数据插入关系表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46154630/

相关文章:

mysql - 使用存储过程序列化事务

sql - 自 FULL OUTER JOIN 的替代方案以获得两个条目之间的匹配

mysql - 5 个表 -> 显示某些不同的行

mysql - 如何插入表,其中从选择中获取的值之一

python - django.db.utils.operationalError : (2059 ,"Authentication Plugin ' caching_sha2_password'")

php - 第 17 行出现 fatal error : Call to a member function fetch_assoc() on a non-object in . ..

php - Revive Ad 无法升级

sql - Bigquery Full Join ON 多个条件

c# - 将多个值从一个表插入到另一个表

python - 使用python从CSV插入到oracle表中