使用连接表创建SQL转储

时间:2014-08-06 05:17:03

标签: mysql

我必须将以下选择转移到一个表中:

SELECT  
o.objektnummer, su.subunternehmernummer,
a.artikelnummer, a.artikel, a.beschreibung,
a.einheit, a.preis_pro_einheit, a.anzahl_parameter, a.p1_einheit, a.p2_einheit, a.p3_einheit,
a.mbs_artikel, a.su_gewerk, a.preis_status,
a.mindermenge_kleiner_als, a.zulage_mindermengen_artikel_nummer
FROM
objekt_artikel oa
INNER JOIN objekt o ON o.id = oa.id_objekt
INNER JOIN artikel a ON a.id = oa.id_artikel
INNER JOIN subunternehmer_objekt suo ON suo.id_objekt = o.id
INNER JOIN subunternehmer su ON su.id = suo.id_subunternehmer

这是插入物:

INSERT INTO objekt_artikel (
                    id_objekt, id_subunternehmer,
                    artikelnummer, artikel, beschreibung,
                    einheit, preis_pro_einheit, anzahl_parameter, p1_einheit, p2_einheit, p3_einheit,
                    mbs_artikel, su_gewerk, preis_status,
                    mindermenge_kleiner_als, zulage_mindermengen_artikel_nummer
                     )

如果我将Limit设置为1000,那么select工作完美且插入可以完成,但select中的表有超过19 000 000行,这会导致服务器崩溃。我现在的想法是,我使用这个选择进行sql-dump,但我认为问题在于我有很多内部联接。

我可以使用此选项将文件输出吗? semikolon seperatet?

1 个答案:

答案 0 :(得分:0)

我没有使用1900万行!但是我可以想到一个可以由调用这些SQL语句的人实现的解决方案。我给出下面的伪代码:

for ($start=0, $limit=1000; ; $start += $limit) {
    $result = execute("SELECT * FROM $tableName LIMIT $start, $limit");
    if ($result) insertToTable($result);
    else break;
}