为什么此查询会返回符合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 '%йло%'
答案 0 :(得分:3)
以下是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
...
换句话说,即使涉及该名称的OR
条件之一为真,也会导致返回所有行,显然忽略了您的其他限制。
此处的主页课程是AND
具有比OR
更高的优先级或执行顺序。但是我们可以使用括号来强加任何我们想要的评估顺序。
答案 1 :(得分:1)
它实际上是为了一个或一个条件 就像是 城市=“东西” 要么 命名= '某物'
使用子查询
首先获取您正在寻找的城镇,然后从该结果获取您要查找的名称
希望有所帮助