查询返回所有行
问题描述:
为什么此查询返回与我的OR LIKE
条件匹配的所有行并跳过doctorLang
。 city
。我的意思是我得到所有城镇中的所有行,而不是仅在某个行中。查询返回所有行
SELECT `doctor`.`id`, `doctorLang`.`first_name`, `doctorLang`.`second_name`, `doctorLang`.`city`, `doctorLang`.`hospital_name`
FROM `doctor` LEFT JOIN `doctorLang` ON `doctor`.`id`=`doctorLang`.`doc_id`
WHERE `doctorLang`.`city`='Пловдив'
AND `doctorLang`.`language`='bg'
AND `doctor`.`active`=1
AND `doctorLang`.`first_name` LIKE '%йло'
OR `doctorLang`.`first_name` LIKE '%йло%'
OR `doctorLang`.`first_name` LIKE 'йло%'
OR `doctorLang`.`second_name` LIKE '%йло'
OR `doctorLang`.`second_name` LIKE '%йло%'
OR `doctorLang`.`second_name` LIKE 'йло%'
OR `doctorLang`.`third_name` LIKE '%йло'
OR `doctorLang`.`third_name` LIKE '%йло%'
答
这是你WHERE
条款的一个版本,它应该像预期的那样:
WHERE
doctorLang.city = 'Пловдив' AND
doctorLang.language = 'bg' AND
doctor.active = 1 AND
(
doctorLang.first_name LIKE '%йло' OR
doctorLang.first_name LIKE '%йло%' OR
doctorLang.first_name LIKE 'йло%' OR
doctorLang.second_name LIKE '%йло' OR
doctorLang.second_name LIKE '%йло%' OR
doctorLang.second_name LIKE 'йло%' OR
doctorLang.third_name LIKE '%йло' OR
doctorLang.third_name LIKE '%йло%'
)
你原来WHERE
条款,没有括号,被解释成这样:
WHERE
(
doctorLang.city = 'Пловдив' AND
doctorLang.language = 'bg' AND
doctor.active = 1 AND
doctorLang.first_name LIKE '%йло'
)
OR
doctorLang.first_name LIKE '%йло%' OR
doctorLang.first_name LIKE 'йло%' OR
...
在换句话说,如果即使涉及名称的条件之一是真实的,它也会导致所有行被返回,显然忽略了你的呃限制。
这里带回家的教训是AND
有更高的优先或执行顺序比OR
。但是我们可以通过使用括号强加任何我们想要的评估顺序。
+0
非常感谢! –
答
它正在为一个或病情反而 它像 城市=“东西” 或 名=“东西”
使用子查询,而不是
先取你正在寻找的小镇然后从该结果对你正在寻找
的名字希望它有助于
提供您的样品输入 - 输出... –
因为你没有使用禁忌。古典错误。 – fancyPants
['AND'运算符](https://dev.mysql.com/doc/refman/5.7/en/operator-precedence.html)的优先级高于['OR'运算符](https:// dev .mysql.com/DOC/refman/5.7/EN /运营商precedence.html)。为此指责数学。 – axiac