如何编写SQL查询:实时获取参数并返回不匹配的行
SQL查询解决方案
假设表A中需要对比的列名为target_col,表B中存储参数值的列名为param_val,以下是几种可行的查询方式:
基础子查询写法(表B仅存一条参数记录)
直接通过子查询实时获取表B中的参数值,筛选表A中不匹配的行:
SELECT * FROM 表A WHERE target_col != (SELECT param_val FROM 表B);
要是表B里有多条记录,子查询会返回多个值导致报错,这时候得给子查询加过滤条件,比如表B有
param_name列用来区分参数,就改成SELECT param_val FROM 表B WHERE param_name = '需要的参数名',或者用MAX(param_val)取唯一值。
JOIN关联写法(适配多参数场景)
如果表B可能存储多条参数值,用交叉关联来匹配筛选:
SELECT A.* FROM 表A A CROSS JOIN 表B B WHERE A.target_col != B.param_val;
处理NULL值的情况
要是表A的target_col存在NULL值,因为NULL和任何值比较都不会返回真,得额外把NULL行也包含进来:
SELECT * FROM 表A WHERE target_col != (SELECT param_val FROM 表B) OR target_col IS NULL;
内容的提问来源于stack exchange,提问作者Van Darth Vadden
相关产品推荐
相关产品推荐

