MySQL 8.x中AND与OR逻辑运算符的查询过滤问题
问题原因及解决方案
逻辑优先级问题:MySQL中
AND的执行优先级高于OR,你原来的SQL语句会被数据库解析为:SELECT * FROM db_catalogo.tb_foto WHERE (db_catalogo.tb_foto.id_catalogo = '1' AND db_catalogo.tb_foto.tag LIKE '%c-119%') OR db_catalogo.tb_foto.tag LIKE'%f-104%' ORDER BY db_catalogo.tb_foto.id_catalogo, db_catalogo.tb_foto.posizione;这就导致只要
tag包含f-104的记录(无论id_catalogo取值)都会被返回,这就是结果中出现目录9数据的原因。修正后的SQL语句:把两个
LIKE匹配条件用括号包裹,确保id_catalogo='1'同时约束两个标签过滤规则:SELECT * FROM db_catalogo.tb_foto WHERE db_catalogo.tb_foto.id_catalogo = '1' AND (db_catalogo.tb_foto.tag LIKE '%c-119%' OR db_catalogo.tb_foto.tag LIKE '%f-104%') ORDER BY db_catalogo.tb_foto.id_catalogo, db_catalogo.tb_foto.posizione;补充提示:由于
tag是Blob类型,确保其存储的是文本格式内容,否则LIKE匹配可能出现异常。
内容的提问来源于stack exchange,提问作者Maverick55
相关产品推荐
相关产品推荐

