SQL入门求助:校验LOCATION表PLACEMENT字段与平面文件有效值
校验LOCATION表PLACEMENT字段有效值的SQL方案
需求回顾
- 平面文件
Valid-Values.txt包含有效值:North End、South End、West End、East End、Middle - 数据库表
LOCATION包含RECORD_NUM(记录编号)和PLACEMENT(位置)两个字段 - 需要筛选出
PLACEMENT值不在有效值列表中的记录,输出错误提示、对应记录编号和无效值
是否需要导入平面文件?
不是必须的,分两种场景选择方案:
方案1:直接硬编码有效值(适合值列表短且固定的情况)
不用导入文件,直接把有效值写进SQL语句里,简单直接。
以主流数据库为例,脚本如下:
SELECT 'PLACEMENT字段值无效' AS 错误信息, RECORD_NUM, PLACEMENT AS 无效值 FROM LOCATION WHERE PLACEMENT NOT IN ('North End', 'South End', 'West End', 'East End', 'Middle');
(注:不同数据库语法差异极小,单引号包裹字符串的规则通用,直接复制修改适配你的数据库即可)
方案2:导入文件到数据库表(适合值列表常变动或较长的情况)
如果后续有效值可能修改,或者列表很长,建议先把文件内容导入一个专门的有效值表,再通过关联查询筛选无效记录。
步骤1:创建有效值表
以MySQL为例,创建一张存储有效值的表:
CREATE TABLE VALID_PLACEMENTS ( PLACEMENT_VALUE VARCHAR(50) NOT NULL PRIMARY KEY );
步骤2:导入文件内容到表中
不同数据库导入方式不同:
- MySQL用
LOAD DATA INFILE命令(注意文件路径权限):LOAD DATA INFILE '/你的文件路径/Valid-Values.txt' INTO TABLE VALID_PLACEMENTS LINES TERMINATED BY '\n'; - SQL Server可以用导入向导或
BULK INSERT;Oracle用SQL*Loader,具体操作可查对应数据库的官方文档
步骤3:查询无效记录
SELECT 'PLACEMENT字段值无效' AS 错误信息, L.RECORD_NUM, L.PLACEMENT AS 无效值 FROM LOCATION L LEFT JOIN VALID_PLACEMENTS VP ON L.PLACEMENT = VP.PLACEMENT_VALUE WHERE VP.PLACEMENT_VALUE IS NULL;
内容的提问来源于stack exchange,提问作者NewToSQL
相关产品推荐
相关产品推荐

