作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我想做的是将 CSV 上传到一个表中,同时使用 JOIN 将第三个表中的信息附加到目标表中。
CSV import.csv(100 万行)如下所示:
firstname | lastname
目标表“names”如下所示:
firstname | lastname | gender
“性别”表(有 70 万行)如下所示:
firstname | gender
所以,我理想的查询应该是这样的:
LOAD DATA LOCAL INFILE "import.csv"
INTO TABLE names n
LEFT JOIN gender g ON(g.firstname=n.firstname)
按照这些思路,将导入与连接结合起来,以便名称中的最终结果具有来自性别和 CSV 的数据。
但是,我知道 LOAD DATA LOCAL INFILE 不能与 JOIN 结合使用,并且尝试对每一行使用 INSERT 和 JOIN 会占用大量 CPU。
有什么想法吗?
最佳答案
您可以使用 LOAD DATA INFILE
的 SET
子句来实现您的目标
LOAD DATA LOCAL INFILE '/path/to/your/file.csv'
INTO TABLE names
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n' -- or '\r\n' if file has been prepared in Windows
IGNORE 1 LINES -- use this if your first line contains column headers
(@first, @last)
SET firstname = @first,
lastname = @last,
gender =
(
SELECT gender
FROM gender
WHERE firstname = @first
LIMIT 1
)
确保:
gender
表中的 firstname
列有一个索引names
表上没有任何索引。完成加载后添加它们(索引)。关于mysql - 使用同时 JOIN 将 CSV 上传到 MySQL 表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18552006/
我是一名优秀的程序员,十分优秀!