MySql:将CSV数据上传到临时表然后加入
Posted
技术标签:
【中文标题】MySql:将CSV数据上传到临时表然后加入【英文标题】:MySql: Upload CSV data into Temporary Table and Then join 【发布时间】:2019-01-08 16:52:31 【问题描述】:mysql 查询遇到了一个非常奇怪的问题。我不确定我是否做对了。我已尝试在网络上抓取合法的解决方案,但找不到任何东西。
我有 1 张桌子,请说如下:
饭桌
ID | Col1 | Col2
-------------------------
1 | abc | ABC1234567675
2 | def | ABC3435345345
ID 是 Int 类型
Col1 是 Varchar(50)
Col2 是 varchar(200) 类型的字母数字字符串
我有一个 CSV 文件,它只有 1 列,其值与上面 Foo 表的 Col2 相同。
我正在将 CSV 加载到临时表中,假设 Bar 使用如下查询:
drop temporary table Bar;
CREATE TEMPORARY TABLE Bar (
Col2 varchar(200)
);
LOAD DATA LOCAL INFILE 'C:/update.csv'
INTO table Bar;
当我在临时表栏上执行 Select * 时。它列出了它从 CSV 上传到临时表中的所有值。
但是当我尝试在 Col2 上加入它时。它只返回 1 个结果。
而当我使用表格栏中的 Col2 值手动查询带有 where 子句的表 Foo 时。它显示表 Foo 中存在许多记录。
我尝试了以下查询:
select * from Foo inner join Bar on Foo.Col2=Bar.Col2;
select * from Foo join (select Col2 from Bar) b on Foo.Col2=b.Col2;
select * from Foo where Col2 in (select Col2 from Bar);
但是它们三个都只返回 1 个结果。 过去有没有其他人也遇到过类似的问题? 你能指导我做错什么吗?
任何帮助将不胜感激。
【问题讨论】:
检查并查看 Bar 中的 Col2 是否包含任何尾随空格。如果没有,则检查 Foo 中的 Col2。 我尝试使用 TRIM() 函数尝试修剪 where 子句中的两个值,但没有奏效.... :( 【参考方案1】:最后,经过大量谷歌搜索后,我发现我的“加载数据”命令不完整。我在 Bar 表数据中有回车符和换行符。所以我不得不在我的“加载数据”命令中加入以下几行:
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\r\n';
然后它运行良好。
【讨论】:
以上是关于MySql:将CSV数据上传到临时表然后加入的主要内容,如果未能解决你的问题,请参考以下文章