MySQL查询:当cota列值为paga时隐藏对应行的实现方法
解决方法:修正字符串值的引用问题
你的问题出在NOT IN(paga)这部分——paga是字符串值,必须用单引号括起来,否则MySQL会把它当成列名来解析,自然达不到过滤的效果。
修改后的SQL语句(两种可选写法)
写法1:使用NOT IN(适合后续需要添加多个排除值的场景)
SELECT DATE_FORMAT(nascimento, '%d-%m-%Y') as 'nascimento', `first_name`, `last_name`, `name_completo`, `cota` FROM `socios` WHERE MONTH(nascimento) = MONTH(NOW()) AND cota NOT IN ('paga') ORDER BY nascimento ASC;
写法2:直接使用<>(更简洁,仅排除单个值时推荐)
SELECT DATE_FORMAT(nascimento, '%d-%m-%Y') as 'nascimento', `first_name`, `last_name`, `name_completo`, `cota` FROM `socios` WHERE MONTH(nascimento) = MONTH(NOW()) AND cota <> 'paga' ORDER BY nascimento ASC;
额外注意事项
如果cota列存在NULL值,两种写法的表现会有差异:
NOT IN ('paga'):会自动排除cota为NULL的行(因为SQL中NULL和任何值比较都返回UNKNOWN)cota <> 'paga':会保留cota为NULL的行,如果你需要同时排除NULL,可以改成:
或者更简洁的:AND (cota <> 'paga' AND cota IS NOT NULL)AND COALESCE(cota, '') <> 'paga'
内容的提问来源于stack exchange,提问作者NunchuckCoder
相关产品推荐
相关产品推荐

