首页 > 解决方案 > SQL 选择未查看正确的数据

问题描述

我之前一直在使用 MySQL,我可以通过这个 select 查询得到正确的响应。

SELECT * 
FROM TABLE 
WHERE COLUMN1 NOT IN ('Done', 'Closed') 
  AND COLUMN2 IN ('Dude1', 'Dude2', 'Dude3')

现在我们已经将 db 更改为 oracle,如果 COLUMN1 没有任何值,它就会被忽略。换句话说,它是空/空的。

我已经尝试过我认为是进行查询的正确方法,但它的行为并不像我希望的那样。也许有人有一个解决方案,我可以检索与 MySQL 中相同的信息。

最后一次尝试我结束了这个查询

 SELECT * 
 FROM TABLE 
 WHERE COLUMN1 NOT IN ('Done', 'Closed') 
    OR COLUMN1 IS NULL 
   AND COLUMN2 IN ('Dude1', 'Dude2', 'Dude3')

当我运行这个查询时,我在 COLUMN1 中得到了所有具有 null/empty 作为值的值,但我也从回复中得到了 COLUMN2 中的 Dude6 ......而且我不知道如何以其他方式做到这一点......

如果我删除

OR Column1 IS NULL

我不会得到神秘的 Dude6 作为响应,但我也不会得到 column1 为空/null 并且其中包含 Dude1 的行。

标签: sqlselect

解决方案


您只需要在OR表达式周围加上括号:

SELECT * 
FROM TABLE 
WHERE 
  (COLUMN1 NOT IN ('Done','Closed') OR COLUMN1 IS NULL)
  AND COLUMN2 IN ('Dude1','Dude2','Dude3')

推荐阅读