使用原始字符串数据创建左联接

问题描述

我在文本文件中有一个电子邮件列表,还有一个带有电子邮件列的 Person 表。

我需要知道表中有哪些电子邮件,哪些没有。

因此,我在考虑创建查询并使用Person表在原始电子邮件数据中进行某种左联接

现在,我可以这样做:

passenger.3000.log

但是,我想要返回的内容如下:

select count(*) from PERSON p where p.EMAIL in ("email1@mail","XXXX@mail.com");

解决方法

将文本文件中的数据加载到某个表中是最佳选择(该表可能是临时的)。然后可以通过常用方式使用加载的数据。

另一个选项是使用CSV引擎-但该引擎必须在您的服务器实例上可用(检查SHOW ENGINES输出)。您必须使用连接到文件的此引擎创建表,然后以常见方式使用该表。

任何情况下,您都必须具有CREATE TABLE特权。

最后一个选项正在使用LOAD_FILE()函数。文件内容将作为一个字符串文字加载,可以解析并拆分为单独的值(在最新的MySQL版本上这很容易)。但是您必须设置secure_file_privilege选项,如果它不为空,则必须将文件放入指定的文件夹中。此选项不需要特殊的附加特权。另外,可以在存储过程中使用此功能,在存储过程中,将在动态SQL中使用加载的数据。

,

我不认为MySQL支持直接访问文本文件-至少没有扩展名。因此,您应该将数据导入数据库。最简单的方法是LOAD DATA INFILE

然后,您可以使用LEFT JOIN做您想做的事情:

select e.raw_email,p.email
from staging_emails e left join
     persons p
     on p.email = e.raw_email;

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...