我有一个这样的表,它有两行:
nombre_per | apellido_per | permisos_busqueda_per
-------------+----------------+----------------------
Mattew | Janeey | SI
Janny | Pineda | NO
我的问题如下
SELECT nombre_per, apellido_per, permisos_busqueda_per
FROM la_tabla
WHERE nombre_per LIKE '%a%' OR apellido_per LIKE '%a%' AND permisos_busqueda_per="SI"
如果我只寻找启用了 findable ( ) 权限的用户,permisos_busqueda_per
那么如果 Janny 没有启用 findable 权限,为什么我会同时获得这两行?
这是运算符优先级的问题,正如您在MySQL 文档中看到的那样,AND 运算符优先于 OR,这使得您的 SELECT 选择基于以下条件:
当你真正想要的是:
解决方案很简单:使用括号:
尝试用括号对条件进行分组
您在查询中有错误,您必须更改:
为了这:
问题出在“或”中。希望这可以帮到你
正如他们在其他答案中所评论的那样,您的问题是根据文档的操作员没有遵循您期望的过程;我建议您在使用操作时这样做:
将 AND 分隔在不同的行中,并始终
()
在每一行中使用它们。同样的事情,加上我不确定mysql,但在sql中你必须在字符串周围使用单引号,即'而不是“
其他人已经记录了它,但是您必须知道因素的顺序对查询有很大影响,它为您带来了两个值,因为它做的最后一件事是OR,这就是为什么您必须放它在括号内以区分一种操作和另一种操作,以便管理员不会混淆
SELECT per_name, per_last, per_search_permissions FROM the_table WHERE (per_name_LIKE '%a%' OR per_last_name LIKE '%a%') AND per_search_permissions="YES"
您必须记住,在这种情况下,执行顺序在 Where 先是括号然后是 AND 之后,它已经选择了所有它的名字和姓氏都有“a”,然后继续验证权限
我希望这些信息有帮助