Mysql单列表 - >插入其他表格

时间:2013-06-15 11:00:05

标签: mysql import

我有两张桌子:t1t2
- t2只有一列名为stuff(60.000个条目)。
- t1有15列,包括stuff(空)。 t1有大约650.000个条目。

如果我无法与之匹配,如何从t2.stuff t1.stuff导入数据? (我只想使用来自t1.stuff的数据填充t2.stuff的空字段,而不关心匹配ID或任何内容。)

最好的情况(我认为)是,如果我运行此查询大约11次,则会填充t1.stuff的所有字段,因为t1.stuff中没有剩余空字段。

以下是表格的示例:

t1
|__a___|_b_|_c_|stuff|...|
|___308|foo|bar|_____|baz|
|___312|foo|bar|_____|baz|
...
|655578|foo|bar|_____|baz|

t2
|___stuff___|
|some_info_1|
|some_info_2|
...
|some_info_n|

也许需要多个步骤......

更新

以下是 解决方案 ,如果有人遇到类似问题,我会选择<所有学分 nurdglaw 指向我正确的方向。所以我们走了:

  1. 在您的表中添加一个新列,其中填充了自动增量数字(我设置alter table t1 auto_increment = 1并在我的主键上临时禁用自动增量,以避免此代码出错)ALTER TABLE t1 ADD COLUMN new_column INTEGER UNIQUE AUTO_INCREMENT; < / p>

  2. 为t2做了同样的事情。如果您还没有第二个表,可以执行以下操作: CREATE TABLE t2 (id INTEGER PRIMARY KEY AUTO_INCREMENT,t2_data_column VARCHAR(255));&lt; - 根据您的需要调整数字

    并导入您的数据:
    LOAD DATA LOCAL INFILE 'path_on_your_server/data_file.csv'
    INTO TABLE t2
    LINES TERMINATED BY '\r\n'&lt; - 根据您的换行需求进行调整 (t2_data_column)

  3. 现在,您可以通过执行以下操作INNER JOIN t1t2进行匹配,然后将t2中的数据添加到{{} 1}}
    t1
    UPDATE t1 AS s
    JOIN t2 AS t ON t.id=s.new_column&lt; - SET s.stuff=t.t2_data_column;stuff中我要导入数据的列。

  4. 收拾残局 t1
    DROP TABLE t2;
    如果您之前使用过主键,请再次启用主键上的自动增量并将其设置为新行所需的数字。
  5. 就是这样,你已经完成了!

    还有一点需要注意:我决定离线调整我的数据,并一次性导入这个方法所需的650.000个条目,而不是只用我在初始问题中输入的60.000。但是你会想到用任意数量的数据来做它并将它与你需要的任何数据相匹配。

2 个答案:

答案 0 :(得分:1)

INSERT语句在表中创建新行。 您需要对现有行进行更新

一种简单的方法是使用外部脚本语言

这是一个反叛的例子

假设你使用softinnov的mysql库

a _ 是t1

中行的唯一键的名称
  

db:open mysql:// user:pass @ mysql

     

插入db {select * from t1}

     

t1rows:copy db

     

插入db {select * from t2}

     

t2rows:copy db

     

foreach row t1rows [

     
    

insert db [{update t1 set t1.stuff =?其中t1。 a _ =?} t2rows / 1/1 row / 1]

         

尾巴?下一个t2rows [

         
  t2rows: head t2rows
    
         

] [

         
  t2rows: next t2rows
             

    
  
     

抱歉,我的格式和示例中的变量仍然有困难

答案 1 :(得分:0)

试试这个

     INSERT INTO t1 (stuff)
     SELECT DISTINCT stuff FROM t2

我希望它有所帮助