0

我有两个表:t1并且t2
-t2只有 1 个名为的列stuff(60.000 个条目)。
-t1有 15 列,包括stuff(空)。t1有大约 650.000 个条目。

当我没有与之匹配的数据时,如何从t2.stuffin导入数据?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;

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

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

  3. 现在您有了要匹配的内容,您可以INNER JOIN t1通过t2执行以下操作:将数据添加t2t1
    UPDATE t1 AS s
    JOIN t2 AS t ON t.id=s.new_column
    SET s.stuff=t.t2_data_column;<--stufft1我想要将数据导入到的列。

  4. 收拾烂摊子
    DROP TABLE t2;
    ALTER TABLE t1 DROP COLUMN new_column;
    再​​次在主键上启用自动增量,并将其设置为新行所需的数字(如果您以前使用过的话)。

就是这样,你完成了!

进一步说明:我决定离线调整我的数据并一次性导入此方法所需的 650.000 个条目,而不是只使用我在最初问题中输入的 60.000 个条目。但是你会想到用任意数量的数据来做这件事,并将它与你需要的任何东西相匹配。

4

2 回答 2

1

INSERT 语句在您的表中创建新行。您需要对已经存在的行进行 UPDATE

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

; 这是一个 rebol 示例

; 假设您使用来自 softinnov 的 mysql 库

; a_是 t1 中一行的唯一键的名称

数据库:打开 mysql://user:pass@mysql

插入数据库 {从 t1 中选择 *}

t1rows:复制数据库

插入数据库 {从 t2 中选择 *}

t2rows:复制数据库

foreach 行 t1rows [

插入数据库 [ {更新 t1 设置 t1.stuff = ?其中t1。a_ = ?} t2rows/1/1 行/1]

要么尾巴?下 t2 行 [

  t2rows: head t2rows

] [

  t2rows: next t2rows

]

]

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

于 2013-06-15T18:37:25.470 回答
0

试试这个

     INSERT INTO t1 (stuff)
     SELECT DISTINCT stuff FROM t2

我希望它有帮助

于 2013-06-15T12:59:08.843 回答