MYSQL选择使用WHERE,AND或OR

时间:2019-12-03 09:44:04

标签: mysql select operators where-clause

我正在尝试从数据库中选择数据,但是遇到了麻烦,我确定它很简单,虽然我没看到,但我无法弄清楚。

一个表,作业,具有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,已取消或样本的字段。现在,如果我删除!=并仅替换为=,它将仅显示FOC,Canceled或Sample的那些,这向我表明使用!=存在问题。我尝试使用<>进行替换,但仍然无法正常工作。

如果仅通过检查计划状态对其进行测试,则它的工作方式如下:

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;

有什么想法吗?

预先感谢

2 个答案:

答案 0 :(得分:0)

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;

答案 1 :(得分:0)

这似乎更容易处理:

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以上)的地方时,您可以确信自己的模式设计不是最优的。

相关问题