将一张表中的行写入另一张表中的每一行

时间:2019-04-16 07:48:55

标签: mysql

我有3张桌子:table1, table2, table3

对于table3中的每一行,我想从table2table3中取值并将它们插入table1中。我需要一个循环吗?没有键或任何东西,只有3个表。

table2table3中的列都出现在table1中(有些具有不同的名称),但是table1还有更多的列,应保留为空。 / p>

这是表格的详细外观:

table1:

制造商2 |商店| sku |名称| title_farbe |制造商| meta_description_dynamic1 | title_modelljahr_prefix | title_modelljahr | size_prefix | title_gender

table2:

制造商2 | sku |名称| title_farbe |制造商

table3:

商店|元

因此,除了table3.meta应该变为table1.meta_description_dynamic1之外,这些列的名称几乎相同。

谢谢

1 个答案:

答案 0 :(得分:1)

您可以使用INSERT ... SELECT查询来执行此操作,其中SELECT查询是JOINtable2之间行号的table3。由于table1中有多余的列,因此您必须枚举每个表的列,例如

INSERT INTO table1 (manufacturer2, sku, name, title_farbe, manufacturer, store, meta_description_dynamic1)    
SELECT manufacturer2, sku, name, title_farbe, manufacturer, store, meta
FROM (SELECT manufacturer2, sku, name, title_farbe, manufacturer,
             @rownum := rownum + 1 AS rownum
      FROM table2
      CROSS JOIN (SELECT @rownum := 0) r
      ) t2
JOIN (SELECT store, meta,
             @rownum2 := rownum2 + 1 AS rownum
      FROM table3
      CROSS JOIN (SELECT @rownum2 := 0) r
      ) t3 ON t3.rownum = t2.rownum

请注意,没有SELECT子句的ORDER BY不能保证排序,因此结果可能不完全匹配。但是,对于您的表,由于没有公共列和自然顺序,您实际上没有太多选择。