我有两个表:t1
和 t2
- t2
只有 1 个名为 stuff
的列(60.000 个条目)。
- t1
有 15 列,包括 stuff
(空)。 t1
大约有 650.000 个条目。
当我没有任何匹配的数据时,如何将 t2.stuff
中的数据导入到 t1.stuff
中? (我只想用 t2.stuff
中的数据填充 t1.stuff
的空字段,而不关心匹配 id 或其他任何内容。)
最好的情况(我认为)是,如果我运行此查询大约 11 次,t1.stuff
的所有字段都会被填充,因为 t1 中没有空字段。剩下的东西
。
以下是表格的示例:
t1
:
|__a___|_b_|_c_|东西|...|
|___308|foo|bar|_____|baz|
|___312|foo|bar|_____|baz|
...
|655578|foo|bar|_____|baz|
t2
:
|___东西___|
|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_INCRMENT;
对 t2 做了同样的事情。如果您还没有第二个表,您可以执行以下操作:
CREATE TABLE t2 (id INTEGER PRIMARY KEY AUTO_INCRMENT,t2_data_column VARCHAR(255));
<-- 根据需要调整数字
并使用以下方式导入您的数据:
加载数据本地内文件'path_on_your_server/data_file.csv'
进入表t2
LINES TERMINATED BY '\r\n'
<-- 根据您的换行需求进行调整
(t2_data_column)
现在您有了要匹配的内容,您可以通过执行以下操作来
INNER JOIN
t1
与t2
:数据从t2
到t1
更新 t1 AS
加入 t2 AS t ON t.id=s.new_column
SET s.stuff=t.t2_data_column;
<--stuff
是我想要将数据导入到的t1
中的列。- 收拾残局
删除表t2;
ALTER TABLE t1 DROP COLUMN new_column;
再次启用主键自动增量,并将其设置为新行所需的数字(如果您之前使用过自动增量)。
就是这样,你就完成了!
进一步说明:我决定离线调整数据并一次性导入此方法所需的 650.000 个条目,而不是仅使用我在第一个问题中输入的 60.000 个条目。但是您会想到使用任意数量的数据来执行此操作,并将其与您需要的任何内容进行匹配。
最佳答案
INSERT 语句在表中创建新行。 您需要对已存在的行进行更新
一个简单的方法是使用外部脚本语言
;这是一个 rebol 示例
;假设您使用来自 softinnov 的 mysql 库
; a_ 是 t1 中行的唯一键的名称
db: open mysql://user:pass@mysql
insert db {select * from t1}
t1rows: copy db
insert db {select * from t2}
t2rows: copy db
foreach row t1rows [
insert db [ {update t1 set t1.stuff = ? where t1.a_ = ?} t2rows/1/1 row/1]
either tail? next t2rows [
t2rows: head t2rows
] [
block 引用>t2rows: next t2rows
]
]
block 引用>抱歉,我对示例中的格式和变量仍然有困难
关于Mysql单列表-->插入其他表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17122903/