如何解决使用原始字符串数据创建左联接
我在文本文件中有一个电子邮件列表,还有一个带有电子邮件列的 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;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。