SQL如何查询不包含某些值 用NOT IN实现值排除查询

上周 我的那个朋友 使用NOTIN检查数据 注意NULL问题
2 02 3 年3 月1 5 日 我读到的文章说 NOTIN 找不到 NULL 值
具体示例是 产品表清单 不是电子产品 它也不是服装
从类别 NONE 中的产品中选择(“电子产品”、“服装”);
但是如果类别为NULL 此查询返回 null
为什么? NULL 与任何值 一切皆未知 SQL 中 UNKNOWN 被计为 FALSE
解决方案 第一步 首先使用ISNOTNULL过滤NULL 并且类别不为空
第二步 使用 COALESCE 表示 NULL COALESCE(category, '') DO NOT PRINT ('Electronics', '')
但要注意 COALESCE 原始表可以有默认值 例如:空字符串 存在冲突
替代方案 NOTEXISTS 更稳定 DOES NOT EXIST (SELECT 1 FROM (VALUE('Electronics'), ('Clothes')) AS excepted (category) WHERE p.category = excepted.category)
或 LEFT JOIN LEFT JOIN (VALUE('Electronics'), ('Clothes')) AS excepted(category) ON p.category = excepted.category WHERE excepted.category IS NULL
优化大数据量 当存在多个排除值时 将临时表放在上面 然后使用NOTEXISTS或LEFT JOIN
CREATE TEMPORARY TABLE except_categories (category VARCHAR(2 5 5 )); INSERT INTO 排除的类别 (category) VALUES ('电子产品'), ('服装');
最后,我应该选择哪种方法? 视具体情况而定 不存在并左连接 灵活处理NULL
由你决定

sql语句中查询某字段不含某字符的写法

mysql中如何用sql表示不包含字符的sql?