我正在尝试编写一个稍微复杂的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%'
这似乎很好。但是,当我开始添加运算符以添加progression
和status
时,事情就崩溃了。
基本上,我想查看包含job_name
或SDE
(但不是这样)且具有阶段Software
和{ {1}}等于Phone Screen
或阶段Evaluation
和Yes
是On-site
或Status
我正在使用SQLite和SQLite Studio
有什么想法吗?
答案 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%'