我已经开始学习MySQL而且我遇到了一个案例。
我有下表:
id | value
1 | abc
1 | def
2 |
2 |
3 | pqr
3 |
4 |
4 | xyz
5 |
请注意,numeric int旁边的空值表示空字符串。
问题陈述:我需要获取那些如果组成一个组只会附加空字符串的ID。这里的例子是ids:2,5
说明: id = 2两次都出现空字符串,因此包括在内。 id = 5出现一次并且有一个空字符串,因此包括在内。不包括id = 3,因为其实例之一具有非空值,即“pqr”
我坚持查询:
SELECT * FROM t1 GROUP BY id;
但这会产生错误的结果。
你可以帮帮我吗?什么应该是获取ids = 2,5的查询。我很抱歉表格式。答案 0 :(得分:0)
与计算组内所有行相比,您可以通过条件计数实现预期结果:
select id from t1
group by id
having count(*)=count(if(`value`='',1,null))
count(*)
返回具有相应ID的记录数。 count(if(
值='',1,null))
返回此类记录的数量,其中value
字段为空字符串。
答案 1 :(得分:0)
使用以下查询,您将获得所需的输出。
select id
from test_empty
group by id
having TRIM(TRAILING ',' FROM group_concat(value))=""
按
group_concat(value)
输出将用逗号连接所有ID的值。使用
TRIM(TRAILING ',' FROM group_concat(value))
尾随逗号可以删除通过使用
having
,我们可以在组中放置条件,只检索具有所有空值的id。
答案 2 :(得分:0)
空字符串总是“小于”任何非空字符串,所以这应该可以解决问题:
select id from t1
group by id
having max(value) = ''
答案 3 :(得分:0)
SELECT DISTINCT t1.id
FROM t1
LEFT JOIN t1 t1d ON t1d.id = t1.id AND t1d.value <> ''
WHERE t1d.id IS NULL
没有GROUP BY
和HAVING
=一个快乐的数据库!