我正在尝试编写一个有点复杂的sql搜索。我是SQL的新手,不是百分之百确定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时,事情就变得一团糟了。
基本上,我希望看到包含SDE或Software的job_name的每一行(但不是类似的),并且具有stage Phone Screen且Evaluation等于Yes或stage On-site且Status为Yes或<代码>D14
我使用的是SQLite & SQLite studio
有什么想法吗?
发布于 2019-02-26 23:59:32
优先级的顺序可能是在这里引起问题的原因。在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)发布于 2019-02-26 23:57:21
尝试使用括号: select * from jobs where (job_name LIKE '%SDE‘或job_name LIKE '%software%')和job_name不LIKE '%embedded%’和job_name NOT LIKE‘%INTN%’和job_name不LIKE '%manager%‘和job_name不LIKE '%test%’和job_name NOT LIKE '%SDET%‘
https://stackoverflow.com/questions/54889365
复制相似问题