查询以查找具有多个条目的特定列的空值
Query to find null of specific column with multiple entries
使用下面的示例,我想找到所有在列中具有空值的用户,即使他们在 table 中有多个条目。例如,我有一个像这样的 table:
ID
userid
col1
col2
col3
1
user1
a
null
b
2
user1
b
a
b
3
user2
a
null
b
4
user2
b
null
b
我只想 return user2,因为它的 col2 没有为任何行填充任何内容。但是,我如何创建一个不会将我带回 user1 的查询,因为 user1 在其中一行中确实具有 col2 的值。 User1 一直被拉,因为它确实有一行 col2 为空。基本上任何 userId,在此 table 中的任何行中的 col2 中均未填充任何内容。如果 userId 在 col2 中确实有值,则不要 return 该 userId。
我试过这样的事情:
select distinct(a.userid) from User a
group by a.userid
having a.col is null
如果只想要用户,可以使用聚合:
select user
from t
group by user
having max(col1) is null or
max(col2) is null or
max(col3) is null;
MAX()
(或大多数聚合函数)return NULL
仅当所有值都是 NULL
时。您也可以使用 COUNT()
:
having count(col1) = 0 or
count(col2) = 0 or
count(col3) = 0;
使用NOT EXISTS
:
SELECT DISTINCT u1.userid
FROM User u1
WHERE NOT EXISTS (SELECT 1 FROM User u2 WHERE u2.userid = u1.userid AND u2.col2 IS NOT NULL)
使用下面的示例,我想找到所有在列中具有空值的用户,即使他们在 table 中有多个条目。例如,我有一个像这样的 table:
ID | userid | col1 | col2 | col3 |
---|---|---|---|---|
1 | user1 | a | null | b |
2 | user1 | b | a | b |
3 | user2 | a | null | b |
4 | user2 | b | null | b |
我只想 return user2,因为它的 col2 没有为任何行填充任何内容。但是,我如何创建一个不会将我带回 user1 的查询,因为 user1 在其中一行中确实具有 col2 的值。 User1 一直被拉,因为它确实有一行 col2 为空。基本上任何 userId,在此 table 中的任何行中的 col2 中均未填充任何内容。如果 userId 在 col2 中确实有值,则不要 return 该 userId。
我试过这样的事情:
select distinct(a.userid) from User a
group by a.userid
having a.col is null
如果只想要用户,可以使用聚合:
select user
from t
group by user
having max(col1) is null or
max(col2) is null or
max(col3) is null;
MAX()
(或大多数聚合函数)return NULL
仅当所有值都是 NULL
时。您也可以使用 COUNT()
:
having count(col1) = 0 or
count(col2) = 0 or
count(col3) = 0;
使用NOT EXISTS
:
SELECT DISTINCT u1.userid
FROM User u1
WHERE NOT EXISTS (SELECT 1 FROM User u2 WHERE u2.userid = u1.userid AND u2.col2 IS NOT NULL)