不确定如何写问题。
我有这 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/