获取行数据至少为列MySQL中的null之一

时间:2018-08-11 08:17:18

标签: mysql sql

我有一个看起来像这样的表(实际上我的表中会有更多列)。

CREATE TABLE mytable(
  ID int PRIMARY KEY,
  Name varchar(50),
  teamName varchar(255),
  Create_Date DATETIME
);

以下是一些示例数据

INSERT INTO mytable VALUES (1,NULL,'TEST1','2017-01-02');
INSERT INTO mytable VALUES (2,NULL,'TEST2',NULL);
INSERT INTO mytable VALUES (3,'KK','TEST3','2017-01-02');
INSERT INTO mytable VALUES (4,NULL,NULL,NULL);

我想获取行,列中至少包含一个空值。

我已经尝试过了。我得到了预期的结果。

SELECT * 
FROM mytable
WHERE  Name IS NULL OR teamName IS NULL OR Create_Date IS NULL

期望结果

| ID |   Name | teamName |          Create_Date |
|----|--------|----------|----------------------|
|  1 | (null) |    TEST1 | 2017-01-02T00:00:00Z |
|  2 | (null) |    TEST2 |               (null) |
|  4 | (null) |   (null) |               (null) |

但是我不知道是否有更简单的方法来实现这种效果。

我尝试将IN与IS NULL一起使用,但是没有用。

SELECT * 
FROM mytable
WHERE IS NULL IN (Name,Create_Date,teamName)

以下是示例数据http://sqlfiddle.com/#!9/3b678d/1

3 个答案:

答案 0 :(得分:2)

只需使用IS NULL直接检查三列中的任何一个是否为NULL

SELECT *
FROM mytable
WHERE Name IS NULL OR Create_Date IS NULL OR teamName IS NULL;

答案 1 :(得分:1)

我认为您不能使用IS NULL IN

  

NULL表示我不知道

Working with NULL Values

  

任何与NULL进行算术比较的结果也是NULL,您无法从这些比较中获得任何有意义的结果。

如果列中的某个列为+,则可以使用null添加所有列,结果将为null

SELECT * 
FROM mytable
WHERE (Name+teamName+Create_Date) IS NULL

答案 2 :(得分:1)

有使用IN的方法,但是您的方法比这更好

select * from mytable where id in
(SELECT id
FROM mytable
WHERE  Name IS NULL union
SELECT id
FROM mytable
WHERE  teamName IS NULL union
SELECT id
FROM mytable
WHERE  Create_Date IS NULL
)