MySQL 5.6如何查询无指定字段或字段值为空的记录
嘿,针对你在MySQL 5.6里的查询需求,我给你整理了两种可行的方案,都能精准拿到你想要的结果(id=2和3):
方案一:用子查询排除不符合条件的id
这个思路最简单直接——先找出那些有field='z'且value去空格后不为空的id,然后取所有不在这个集合里的id就行:
SELECT DISTINCT id FROM table2 WHERE id NOT IN ( SELECT id FROM table2 WHERE field = 'z' AND TRIM(value) != '' );
逻辑拆解:
- 子查询部分:筛选出需要排除的id——也就是存在有效
z字段(去空格后有内容)的id; - 外层查询:从表中取出所有不在排除列表里的id,用
DISTINCT确保每个id只出现一次。
方案二:用分组+条件判断(适合扩展其他需求)
如果之后需要同时查看每个id的其他统计信息,用分组的方式会更灵活:
SELECT id FROM table2 GROUP BY id HAVING -- 条件1:该id没有`field='z'`的记录 SUM(CASE WHEN field = 'z' THEN 1 ELSE 0 END) = 0 OR -- 条件2:该id的`z`字段去空格后为空 MAX(CASE WHEN field = 'z' THEN TRIM(value) ELSE '' END) = '';
逻辑拆解:
SUM(CASE...):统计每个id下field='z'的行数,等于0就说明这个id没有z字段;MAX(CASE...):取出每个id下z字段去空格后的值(如果没有z字段就取空字符串),如果这个值是空,就符合条件。
两种方案都能完美适配你的场景,MySQL 5.6对TRIM()、CASE这些函数的支持都没问题,测试下来刚好能得到你期望的结果~
内容的提问来源于stack exchange,提问作者Timmy
相关产品推荐
相关产品推荐

