簡體   English   中英

查詢返回所有行

[英]Query returns all the rows

為什么此查詢返回我符合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
        ...

換句話說,即使涉及名稱的OR條件之一為真,也將導致所有行都被返回,顯然會忽略您的其他限制。

值得一提的是, AND 優先級或執行順序比OR更高。 但是我們可以使用括號強加我們想要的任何評估順序。

它正在為一個或一個條件工作,實際上是像city ='something'或name ='something'

改用子查詢

首先獲取您要查找的城鎮,然后從結果中獲取您要查找的名稱

希望能幫助到你

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM