如何用replace去除数据空格?MySQL查询仅返回表头无数据
问题原因及解决方案
你的查询无数据返回,核心问题是WHERE子句中IN的用法错误:你把多个目标IPC值用|拼接成了单个字符串,IN会将其作为一个整体去匹配replace(IPC_CLASS_SYMBOL,' ','')的结果,而你的表里没有任何一条记录处理后等于这个长字符串,因此无数据返回。
修正方案
方案1:正确使用IN(推荐)
将IN后的单个字符串拆分为独立的IPC值列表,这是IN的标准用法:
SELECT IPC_CLASS_SYMBOL AS IPC, COUNT(DISTINCT appln_id) AS PATENT_COUNT FROM OOO WHERE REPLACE(IPC_CLASS_SYMBOL, ' ', '') IN ( 'G08G', 'G01W', 'G01S17/86', 'G01S15/86', 'G01S17/894', 'G01S17/88', 'G01S17/00' ) GROUP BY IPC ORDER BY IPC;
注:原语句中的DISTINCT可以去掉,因为GROUP BY IPC已经会对IPC值去重。
方案2:使用正则表达式匹配
利用MySQL的REGEXP语法,通过|分隔多个匹配项,同时用^和$确保精确匹配(避免部分匹配):
SELECT IPC_CLASS_SYMBOL AS IPC, COUNT(DISTINCT appln_id) AS PATENT_COUNT FROM OOO WHERE REPLACE(IPC_CLASS_SYMBOL, ' ', '') REGEXP '^G08G$|^G01W$|^G01S17/86$|^G01S15/86$|^G01S17/894$|^G01S17/88$|^G01S17/00$' GROUP BY IPC ORDER BY IPC;
方案3:用OR连接多个条件
如果IPC值数量不多,也可以直接用OR逐个匹配:
SELECT IPC_CLASS_SYMBOL AS IPC, COUNT(DISTINCT appln_id) AS PATENT_COUNT FROM OOO WHERE REPLACE(IPC_CLASS_SYMBOL, ' ', '') = 'G08G' OR REPLACE(IPC_CLASS_SYMBOL, ' ', '') = 'G01W' OR REPLACE(IPC_CLASS_SYMBOL, ' ', '') = 'G01S17/86' OR REPLACE(IPC_CLASS_SYMBOL, ' ', '') = 'G01S15/86' OR REPLACE(IPC_CLASS_SYMBOL, ' ', '') = 'G01S17/894' OR REPLACE(IPC_CLASS_SYMBOL, ' ', '') = 'G01S17/88' OR REPLACE(IPC_CLASS_SYMBOL, ' ', '') = 'G01S17/00' GROUP BY IPC ORDER BY IPC;
额外验证建议
如果修正后仍无数据,可以先执行以下语句确认表里是否存在符合条件的记录:
SELECT DISTINCT REPLACE(IPC_CLASS_SYMBOL, ' ', '') FROM OOO;
查看返回的IPC值是否包含你要匹配的目标值,排除数据本身不存在的情况。
内容的提问来源于stack exchange,提问作者Steve Lee
相关产品推荐
相关产品推荐

