sql - 查询不喜欢返回奇怪的结果
问题描述
我被难住的简单查询。我正在尝试过滤掉4120
以等等结尾的工作。当我运行这个查询
select Job.Job, Job.Status from Job
Where(Job.Job Not Like '%4120'
And Job.Job Not Like '%4235'
And Job.Job Not Like '%4236'
And Job.Job Not Like '%5910'
And Status = 'Active' OR Status = 'Complete')
Order By Job.Job
我得到这些结果
Job Status
01-19-4120 Complete
01-19-4235 Complete
01-19-5910 Complete
02-19-4120 Complete
02-19-4235 Complete
02-19-4236 Complete
02-19-5910 Complete
03-07-4120 Complete
03-19-4120 Complete
03-19-4235 Complete
03-19-5910 Complete
04-19-4120 Complete
04-19-4160 Complete
我的查询有问题吗?
解决方案
你有一个逻辑上的问题。我高度怀疑您应该OR
用括号括住 ed 条件,如下所示:
Job.Job Not Like '%4120'
And Job.Job Not Like '%4235'
And Job.Job Not Like '%4236'
And Job.Job Not Like '%5910'
And (Status = 'Active' OR Status = 'Complete')
说明:由于逻辑运算符OR
的优先级低于AND
,因此您的WHERE
条件实际上等同于:
(
Job.Job Not Like '%4120'
And Job.Job Not Like '%4235'
And Job.Job Not Like '%4236'
And Job.Job Not Like '%5910'
And Status = 'Active'
) OR Status = 'Complete'
这允许任何为 的记录,无论 的值如何Status
,这都不是您想要的。'Complete'
Job
另外,请注意,应该可以通过使用字符串函数而不是Not Like
s 和in
条件而不是来简化这些条件Or
。假设您的 RDBMS 支持right()
:
right(Job.Job, 4) not in ('4120', '4235', '4236', '5910')
and Status in ('Complete', 'Active')
推荐阅读
- python - 如何在opencv中显式访问mjpeg后端进行视频捕获
- javascript - 复制到剪贴板时如何删除一个空的新行?
- python-3.x - 从python中的数据框中提取某种语言的字符串
- r - 只要一个组包含某些值,如何过滤数据?
- uwp - 使用 TimeTrigger 运行后台任务的最长时间
- python - quadpy IntegrationError: 给定的 max_num_subintervals (= 50) 无法达到公差 (abs: 1.49e-08, rel: 1.49e-08)
- python - 如何在 PyQt5 中正确使用 QOpenGLBuffer 的分配/读/写?
- python - 多个 Y 轴比例不同的堆叠水平图
- google-cloud-dataprep - Cloud Dataprep BigQuery Upsert
- mongodb - 在 mongoDB 中通过属性构建进行分组