MySQL - 查询以获取特定结果

时间:2017-04-24 13:10:22

标签: mysql sql

我已经开始学习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的查询。我很抱歉表格式。

4 个答案:

答案 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 BYHAVING =一个快乐的数据库!