使用多个布尔运算符的SQL搜索

时间:2019-02-26 15:51:11

标签: sql

我正在尝试编写一个稍微复杂的sql搜索。我是SQL新手,而不是100%确定sql如何解释我的表达式。

我有一个像这样的表:

| job_name | progression | status | 

我正在尝试将此布尔运算符转换为SQL表达式

job_name LIKE (software OR SDE) AND NOT LIKE (embedded OR intern OR manager OR test OR SDET) AND progression IS (("Phone screen" AND (Status IS "yes))  OR ("On-site" AND (Status IS "yes" OR "no")))

我有这样的东西

select * from jobs
where job_name LIKE '%SDE'
OR job_name LIKE '%software%'
AND job_name NOT LIKE '%embedded%'
AND job_name NOT LIKE '%intern%'
AND job_name NOT LIKE '%manager%'
AND job_name NOT LIKE '%test%'
AND job_name NOT LIKE '%SDET%'

这似乎很好。但是,当我开始添加运算符以添加progressionstatus时,事情就崩溃了。

基本上,我想查看包含job_nameSDE(但不是这样)且具有阶段Software和{ {1}}等于Phone Screen或阶段EvaluationYesOn-siteStatus

我正在使用SQLite和SQLite Studio

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

优先顺序可能是导致这里出现问题的原因。我永远都不记得它在SQL中的AND / OR之间是如何工作的,即使我不能期望阅读我的代码的人也能记住。因此,我建议使用括号来解决歧义。像下面这样的东西应该起作用:

select * from jobs
where (job_name LIKE '%SDE' OR job_name LIKE '%software%')
 AND job_name NOT LIKE '%embedded%'
 AND job_name NOT LIKE '%intern%'
 AND job_name NOT LIKE '%manager%'
 AND job_name NOT LIKE '%test%'
 AND job_name NOT LIKE '%SDET%'
 AND (other conditions)

答案 1 :(得分:0)

尝试使用括号: 从工作中选择* 其中(job_name喜欢'%SDE' 或job_name喜欢'%software%') AND job_name不喜欢'%embedded%' AND job_name不喜欢'%intern%' AND job_name不喜欢'%manager%' AND job_name不喜欢'%test%' AND job_name不喜欢'%SDET%'