获取mysql中至少一个null列的行数据

dvtswwa3  于 2021-06-23  发布在  Mysql
关注(0)|答案(3)|浏览(350)

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

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) |

但我不知道有没有更简单的方法来达到这个效果。
我尝试在中使用with is null,但无效。

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

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

eqqqjvef

eqqqjvef1#

我想你不能用 IS NULL IN 空表示我不知道
使用空值
任何带null的算术比较的结果也是null,您无法从此类比较中获得任何有意义的结果。
你可以用 + 如果有列,则添加所有列是 null 在列中,结果将是 null .

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

0kjbasz62#

直接检查使用 IS NULL 如果三列中的任何一列 NULL :

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

8zzbczxx3#

有办法使用 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
)

相关问题