SQL中OR/AND子句报错,如何修正专利检索SQL语句?
修正SQL语句的语法与逻辑错误
错误原因
- 语法错误:
WHERE子句中类似or '%semiconductor%'、or '%bus'%'的写法不符合SQL规范,每个条件必须明确指定列名、比较运算符(like/not like)和匹配值,单独字符串无法作为布尔条件;另外'%bus'%'多了一个单引号,属于语法拼写错误。 - 逻辑错误:原语句的逻辑不符合需求,你需要的是标题和摘要都不含所有禁止关键词,但原语句用
or分割禁止词条件,会导致只要满足其中一个禁止词不匹配就通过,而非全部不匹配;同时逻辑运算符优先级(AND高于OR)会导致条件分组混乱,无法正确过滤数据。
修正后的SQL语句
SELECT DISTINCT tls201_appln.docdb_family_id , tls201_appln.appln_id , [appln_auth] , [appln_nr] , [appln_kind] , [appln_filing_date] , [receiving_office] , [earliest_publn_date] , [granted] , [nb_citing_docdb_fam] , [nb_applicants] , [nb_inventors] , tls202_appln_title.appln_title FROM tls201_appln INNER JOIN tls202_appln_title ON tls201_appln.appln_id = tls202_appln_title.appln_id INNER JOIN tls203_appln_abstr ON tls201_appln.appln_id = tls203_appln_abstr.appln_id WHERE -- 标题或摘要包含关键词software (appln_title LIKE '%software%' OR appln_abstract LIKE '%software%') -- 标题不含所有禁止关键词 AND appln_title NOT LIKE '%chip%' AND appln_title NOT LIKE '%semiconductor%' AND appln_title NOT LIKE '%bus%' AND appln_title NOT LIKE '%circuit%' AND appln_title NOT LIKE '%circuity%' AND appln_title NOT LIKE '%circuitry%' -- 摘要不含所有禁止关键词 AND appln_abstract NOT LIKE '%chip%' AND appln_abstract NOT LIKE '%semiconductor%' AND appln_abstract NOT LIKE '%bus%' AND appln_abstract NOT LIKE '%circuit%' AND appln_abstract NOT LIKE '%circuity%' AND appln_abstract NOT LIKE '%circuitry%' -- 申请年份限定在2003-2008之间 AND appln_filing_year BETWEEN 2003 AND 2008
修正说明
- 每个禁止词条件都明确写出
列名 NOT LIKE '匹配值',确保语法合规; - 用
AND连接同一字段的多个禁止词条件,保证该字段同时不含所有禁止关键词; - 用括号明确分组
(appln_title LIKE '%software%' OR appln_abstract LIKE '%software%'),避免逻辑优先级混乱; - 修正了
'%bus'%'的单引号拼写错误。
内容的提问来源于stack exchange,提问作者Benimaru cpt
相关产品推荐
相关产品推荐

