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数据上传到临时表然后加入的主要内容,如果未能解决你的问题,请参考以下文章

mysql创建临时表,将查询结果插入已有表中

Mysql 临时表+视图

如何将数据帧传递到气流任务的临时表中

我无法将 csv 加载到临时表 HIVE

数据库教程MySQL 临时表

从临时表插入 - 创建太多行