我有3张桌子:table1, table2, table3
对于table3
中的每一行,我想从table2
和table3
中取值并将它们插入table1
中。我需要一个循环吗?没有键或任何东西,只有3个表。
table2
和table3
中的列都出现在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
之外,这些列的名称几乎相同。
谢谢
答案 0 :(得分:1)
您可以使用INSERT ... SELECT
查询来执行此操作,其中SELECT
查询是JOIN
和table2
之间行号的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
不能保证排序,因此结果可能不完全匹配。但是,对于您的表,由于没有公共列和自然顺序,您实际上没有太多选择。