MySQL当<>时,选择响应缺少具有NULL值的行用过的

时间:2014-09-09 03:29:26

标签: mysql sql

我没有从MySQL选择查询得到我需要的东西。响应缺少具有属性' c2'的所有行。当我添加一个子句' c2<>时,这是NULL ' A&#39 ;.我也想要那些行。如何更改查询(Q2)才能执行此操作?

这是重现我的问题的代码。

CREATE  TABLE T (
`C1` VARCHAR(63) NOT NULL ,
`C2` VARCHAR(31) NULL);

INSERT INTO T VALUES ('Mike', 'A');
INSERT INTO T VALUES ('Mike', 'B');
INSERT INTO T VALUES ('Mike', 'C');
INSERT INTO T VALUES ('Mike', NULL);
INSERT INTO T VALUES ('Mark', 'C');
INSERT INTO T VALUES ('Mark', NULL);

Q1:

SELECT * FROM T WHERE C1 = 'Mike';

返回的值与我预期的一样:

  • ' Mike',' A'
  • ' Mike',' B'
  • ' Mike',' C'
  • ' Mike',NULL

Q2:

SELECT * FROM T WHERE C1 = 'Mike' AND C2 <> 'A';

返回的值不是我预期的:   - &#39; Mike&#39;,&#39; B&#39;   - &#39; Mike&#39;,&#39; C&#39;

MISSING :(&#39; Mike&#39;,NULL)

1 个答案:

答案 0 :(得分:1)

要获得预期结果,请将查询调整为以下内容:(SQLFiddle

SELECT * FROM T WHERE C1 = 'Mike' AND (C2 <> 'A' OR C2 IS NULL);

为了回答为什么查询没有使用不等于运算符返回预期值的问题,这个article提供了一个很好的解释。

基本上:

  

要测试NULL,请使用IS NULL和IS NOT NULL运算符...   您不能使用算术比较运算符,例如=,&lt;或&lt;&gt;测试NULL。