MYSQL 使用 WHERE、AND、OR 选择

标签 mysql select operators where-clause

我正在尝试从数据库中获取选定的数据,但遇到了麻烦,我确信它很简单,我没有看到,但我无法弄清楚。

表 jobs 有 5 个字段:job_id、job_status、job_schedulestatus、job_schedulestatus2、job_schedulestatus3。 id 是一个自动递增的数字,状态可以有两个值 Active 或 Invoiced,并且计划状态每个都可以包含从下拉列表中选择的大量值,但在这种情况下,我只想关注称为 FOC 的值,已取消并提供示例。

我想要做的是选择所有设置为事件且在计划状态 1-3 中没有设置 FOC、已取消或示例的值

这是我的选择语句:

SELECT job_id, job_status, job_schedulestatus, job_schedulestatus2, job_schedulestatus3
FROM jobs WHERE job_status='Active' 
AND ( job_schedulestatus!='FOC' OR job_schedulestatus!='Cancelled' OR job_schedulestatus!='Sample' )
OR ( job_schedulestatus2!='FOC' OR job_schedulestatus2!='Cancelled' OR job_schedulestatus2!='Sample' )
OR ( job_schedulestatus3!='FOC' OR job_schedulestatus3!='Cancelled' OR job_schedulestatus3!='Sample' )
ORDER BY job_id DESC;

这仍然显示所有具有 FOC、Canceled 或 Sample 的字段。现在,如果我删除 !=并替换为 =它只会显示那些带有 FOC、已取消或示例的内容,这表明使用 != 存在问题。 。我尝试用 <> 替换但还是不行。

如果我只是通过一次检查计划状态来测试它,它的工作原理如下:

SELECT job_id, job_status, job_schedulestatus, job_schedulestatus2, job_schedulestatus3
FROM jobs WHERE job_status='Active' AND job_schedulestatus!='Cancelled
ORDER BY job_id DESC;

有什么想法吗?

提前致谢

最佳答案

这似乎更容易处理:

SELECT job_id
     , job_status
     , job_schedulestatus
     , job_schedulestatus2
     , job_schedulestatus3
  FROM jobs 
 WHERE job_status = 'Active' 
   AND 
     ( job_schedulestatus  NOT IN ('FOC','Cancelled','Sample') 
    OR job_schedulestatus2 NOT IN ('FOC','Cancelled','Sample') 
    OR job_schedulestatus3 NOT IN ('FOC','Cancelled','Sample')
     )
 ORDER 
    BY job_id DESC;

请注意,一般来说,当您发现自己有枚举列(例如上面的 2 列)时,您可以确信您的架构设计不是最佳的。

关于MYSQL 使用 WHERE、AND、OR 选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59154162/

相关文章:

mysql - 比较多个字段的算法

sql - 用于生成示例数据的快速 SQL 查询

MySQL:如何在更新值时使该子查询工作?

c++ - 这是 ->> 一个旧的运算符还是一个错字/错误?

mysql - 如何使用 Jena SDB 插入/更新/删除个人以保持最佳性能?

mysql - 如果一列值为空,则按照 Laravel 中另一列值的顺序排序

mysql - 如何从fld_Date的引用字段中获取下一个日期字段?

sql - 如何在 WHERE 子句中使用临时列名?

有人可以解释为什么 sizeof() 用一元运算符返回这些值吗?

python - `in` 运算符链接出现意外结果