我有两张桌子:t1
和t2
- 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 指向我正确的方向。所以我们走了:
在您的表中添加一个新列,其中填充了自动增量数字(我设置alter table t1 auto_increment = 1
并在我的主键上临时禁用自动增量,以避免此代码出错)ALTER TABLE t1 ADD COLUMN new_column INTEGER UNIQUE AUTO_INCREMENT;
< / p>
为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)
现在,您可以通过执行以下操作INNER JOIN
t1
与t2
进行匹配,然后将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
中我要导入数据的列。
t1
DROP TABLE t2;
就是这样,你已经完成了!
还有一点需要注意:我决定离线调整我的数据,并一次性导入这个方法所需的650.000个条目,而不是只用我在初始问题中输入的60.000。但是你会想到用任意数量的数据来做它并将它与你需要的任何数据相匹配。
答案 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
我希望它有所帮助