如何让MariaDB读取本地TXT文件中的ID作为IN子句条件?
批量导入TXT文件中的ID到MariaDB的IN子句方案
不需要手动逐个添加引号和逗号,有几种高效的方法实现:
方法一:临时表关联查询(推荐,适合大文件)
这种方法稳定性高,处理大文件也不会有性能问题:
- 创建临时表存储TXT中的ID(根据实际ID类型调整字段定义):
CREATE TEMPORARY TABLE temp_ids (id VARCHAR(255));
- 将TXT文件数据加载到临时表(注意路径用斜杠避免转义,若出现权限问题,需确保MariaDB开启
LOCAL_INFILE,连接时可加--local-infile=1参数):
LOAD DATA LOCAL INFILE 'C:/CUSIPs.txt' INTO TABLE temp_ids;
- 通过关联查询替代IN子句:
SELECT m.* FROM db.id_match m JOIN temp_ids t ON m.id = t.id;
方法二:LOAD_FILE函数+字符串拆分(适合小文件)
如果文件内容较少,可直接读取文件并拆分每行数据:
SELECT * FROM db.id_match WHERE id IN ( SELECT TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(file_content, '\n', n), '\n', -1)) FROM ( SELECT LOAD_FILE('C:/CUSIPs.txt') AS file_content, 1 + LENGTH(file_content) - LENGTH(REPLACE(file_content, '\n', '')) AS line_count ) AS f JOIN ( -- 生成足够覆盖文件行数的数字,行数多的话可替换为递归数字表 SELECT 1 AS n UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 ) AS nums ON nums.n <= f.line_count WHERE TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(file_content, '\n', n), '\n', -1)) != '' );
注意:LOAD_FILE要求文件在MariaDB服务器可访问路径,且需对应权限,大文件不建议用此方法。
方法三:命令行预处理(适合快速生成IN子句内容)
用命令行工具先处理TXT文件格式,再复制到SQL中:
sed "s/^/'/;s/$/',/" C:\CUSIPs.txt | tr -d '\n' | sed 's/,$//'
执行后会输出类似'ID1','ID2','ID3'的字符串,直接粘贴到IN()即可。
内容的提问来源于stack exchange,提问作者Michelle
相关产品推荐
相关产品推荐

