是否可以同时选择IS NOT NULL和IS NULL?

时间:2017-09-29 09:33:20

标签: mysql null isnull

我希望获得此查询以便提取所有内容,即nullnull两个值。

SELECT * FROM `tbl` WHERE `column` IS NULL AND NOT NULL

我实际上期望得到相同的结果,好像根本不提供任何WHERE

# should produce the same result set
SELECT * FROM `tbl` WHERE `column` IS NULL AND NOT NULL 
SELECT * FROM `tbl`

尽管条款IS NULL AND NOT NULL在语法上是正确的,但它并没有返回正确的结果,它根本不会返回任何内容。是否可以使用MySQL?

IS NULL AND NOT NULL - 正确的语法,但错误的结果 - 只返回任何内容

IS NULL OR NOT NULL - 与上述相同

IS NULL AND IS NOT NULL - 错误,语法错误

UPD:

NOT一起使用时GROUP BY的顺序有意义。

col IS NOT NULL OR col IS NULL - 确定

col IS NULL OR col IS NOT NULL - GROUP BY无法正常使用

3 个答案:

答案 0 :(得分:1)

尝试:

WHERE `column` IS NULL OR `column` IS NOT NULL 

但这种情况没有意义,因为它与无条件相同。

答案 1 :(得分:0)

让我们从内到外检验这个条件。 not是一个布尔运算符,它否定传递给它的布尔值。否定null会返回null。现在,您在布尔条件(and)(可能是column is nulltruefalse)之间应用了null运算符,这将导致{{ 1}}由于null.不是null,因此此查询不会返回任何行。

简而言之,您的病情有两个问题

  • 第二个词缺少专栏
  • 列不能同时为true而不是null。您的逻辑需要null运算符。

总结一下:

or

答案 2 :(得分:0)

SELECT * 
FROM `tbl` WHERE col1 in
(SELECT col1
FROM
(SELECT DISTINCT col1
FROM `tbl`
WHERE `column` IS NULL
UNION ALL
SELECT DISTINCT col1
FROM `tbl`
WHERE `column` IS NOT NULL) A
GROUP BY col1
HAVING COUNT(*) > 1);

这将为您提供所需的结果。 在这里,col1是表中具有重复数据的列。随时问任何问题。