SQL Query不过滤正确的数据

Dev*_*v01 1 mysql sql database

我有这个问题:

SELECT `gift_donations`.*, `scholarships`.`name` AS scholarship_name
FROM (`gift_donations`)
LEFT
    OUTER JOIN `scholarships` scholarships ON `scholarships`.`id` =
    `gift_donations`.`scholarship_id`
WHERE `gift_donations`.`contact_id` =  '13'
AND
    `gift_donations`.`in_memory` REGEXP '[a-zA-Z]+' OR in_honor REGEXP '[a-zA-Z]+'
ORDER BY
    `gift_donations`.`id` desc
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,在这里我试图让只有那些记录contact_id13,但问题是,结果集还包含其他记录,其contact_id13

为什么会这样,是因为它的REGEXP或我不会让我的查询方式,它应该是只需带回那些记录contact_id13或者说我想任何其他的号码吗?

Lie*_*ers 5

AND优先于OR.你应该AND用括号括起你的第二个句子

(`gift_donations`.`in_memory` REGEXP '[a-zA-Z]+' OR in_honor REGEXP '[a-zA-Z]+')
Run Code Online (Sandbox Code Playgroud)

实际上,你基本上写了以下where子句

A and B or C
Run Code Online (Sandbox Code Playgroud)

由于运算符优先级相当于

(A and B) or (C)
Run Code Online (Sandbox Code Playgroud)

并且必须改为

(A) and (B or C)
Run Code Online (Sandbox Code Playgroud)

您可以在MySQL参考手册中查找所有运算符优先级

请注意,使用括号明确表示总是一个好主意