我有一个看起来像这样的表(实际上我的表中会有更多列)。
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)
答案 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表示我不知道
任何与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
)