我有两个表:t1
并且t2
-t2
只有 1 个名为的列stuff
(60.000 个条目)。
-t1
有 15 列,包括stuff
(空)。t1
有大约 650.000 个条目。
当我没有与之匹配的数据时,如何从t2.stuff
in导入数据?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提供,因为它为我指明了正确的方向。所以我们开始:
在有问题的表中添加一个新列,其中填充了自动递增数字(我
alter table t1 auto_increment = 1
在主键上设置并临时禁用了自动递增,以避免此代码出错)ALTER TABLE t1 ADD COLUMN new_column INTEGER UNIQUE AUTO_INCREMENT;
对 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)
现在您有了要匹配的内容,您可以
INNER JOIN
t1
通过t2
执行以下操作:将数据添加t2
到t1
UPDATE t1 AS s
JOIN t2 AS t ON t.id=s.new_column
SET s.stuff=t.t2_data_column;
<--stuff
是t1
我想要将数据导入到的列。- 收拾烂摊子
DROP TABLE t2;
ALTER TABLE t1 DROP COLUMN new_column;
再次在主键上启用自动增量,并将其设置为新行所需的数字(如果您以前使用过的话)。
就是这样,你完成了!
进一步说明:我决定离线调整我的数据并一次性导入此方法所需的 650.000 个条目,而不是只使用我在最初问题中输入的 60.000 个条目。但是你会想到用任意数量的数据来做这件事,并将它与你需要的任何东西相匹配。