使用来自其他两个表的数据填充新表

时间:2013-01-18 14:23:48

标签: mysql sql

我正在尝试将一些数据从两个表迁移到一个新表中,并且很难弄清楚如何执行此操作。

数据:

table fh rows: A, B, C, X, Y
table fhgb rows: B, C
table gvsi (currently empty) rows: A, X, Y
A is unique, and B+C is unique

完成后,表格gvsi应该包含fh中的所有行,其中X = value且该行不在fhgb中。

这是向gvsi的一次性数据迁移,因此性能不是很大。 fh有3600万行,我关心的是1200万行(其中X =值)。 fhgb有1000万行。我期待gvsi在完成时包含大约200万行(12mil-10mil)。

我用谷歌搜索并尝试了许多东西,但无法获得任何工作(加入,子查询等)任何人都可以帮我弄清楚如何做到这一点?

4 个答案:

答案 0 :(得分:1)

INSERT INTO `gvsi` (A, X, Y)
SELECT A, X, Y
FROM fh 
WHERE X = 'value'
    AND ( fh.B NOT IN (SELECT DISTINCT B FROM fhgb)
        AND fh.C NOT IN (SELECT DISTINCT C FROM fhgb)
    );

应该这样做。

答案 1 :(得分:0)

1步

INSERT INTO gvsi 
SELECT fh.a, fh.x, fh.y FROM fh 
WHERE fh.x = value AND NOT EXISTS 
(SELECT 1 FROM fhgb WHERE fh.b = fhgb.b AND fh.c = fhgb.c);

2个步骤:

DELETE FROM fh WHERE EXISTS 
(SELECT 1 FROM fhgb WHERE fh.b = fhgb.b AND fh.c = fhgb.c);
INSERT INTO gvsi SELECT fh.a, fh.x, fh.y from fh WHERE fh.x = value;

第一个更安全,因为最后,如果你对结果不满意,你可以重复一下。但是,由于条件的原因,它可能会更慢。

答案 2 :(得分:0)

当你使用简单的select insert语句执行它并且在一个步骤中将两个表联合起来时,它看起来很容易和复杂。

 insert Into 3d_Table ( column1, column2, column3) 
  select column1, column2, column3
   ( 
    select column1, column2, column3 
    from 2d_table
    union 
    select column1, column2, column3 
    from 2d_table
  )

如果这有帮助,请尝试

答案 3 :(得分:0)

我们的DB人在2分钟内得出答案:

INSERT INTO gvsi (A, B, X, Y)
SELECT fh.A, fh.B, fh.X, fh.Y
FROM
f_h fh
LEFT OUTER JOIN f_h_g_b fhgb ON fh.A=fhgb.A and fh.B=fhgb.B
WHERE fhgb.A IS NULL

这并不是说这些答案中的一些不起作用,但是这个答案首先尝试了。谢谢你看着它。我也应该尝试其他一些答案,看看它们是否有效以及它们是否能更快地运作。