2011-02-23 84 views
0

我试图组(或至少使唯一)列m_group_name除非该组为空。这样做基本上可以查看尚未拥有组的组(然后可以将其编辑为一个组),同时能够查看现有组。分组,但忽略空白

例如;

id | m_group_name 
--------------------- 
1 | Red 
2 | Blue 
3 | 
4 | Red 
5 | 

其中,理想情况下,将导致一个红色,一个蓝色和两个空白。我试过让空白为空,并给它一个UUID值(在适配类似的东西在Stackoverflow上发现后),但它似乎使每个NULL值相同。

SELECT *, IFNULL(m_group_name,UUID()) AS m_group FROM m GROUP BY m_group 

理想我宁愿不使用NULL是完全诚实

编辑: 意识到“m_group_name”被错误地标记为在实施例“组” - 校正。

回答

0

SELECT * FROM m WHERE LENGTH(Group) IN (0, NULL) * LENGTH(NULL)将返回NULLLENGTH('')将返回0

我对,你想看到所有的行还没有Group

编辑: 好的,我仔细阅读。这个怎么样:

SELECT * FROM m WHERE LENGTH(Group) NOT IN (0, NULL) GROUP BY Group 
UNION ALL 
SELECT * FROM m WHERE LENGTH(Group) IN (0, NULL) 
+0

所有这一切还没有一组在一个查询的唯一的组名沿行 - 这可能吗? – MrJ 2011-02-23 14:08:27

+0

谢谢!这是所有的空白组,只需要那些其他现存的独特组,如果可能的话:) – MrJ 2011-02-23 14:20:44

+0

这将是我的答案的“编辑”部分下面的代码:-) – cypher 2011-02-23 14:23:05

1

这种做法是行不通的,因为UUID()函数将每个查询返回一个值,而不是每行一个单独的值。

您可以使用主键:

SELECT *, IFNULL(m_group_name,id) AS m_group FROM m GROUP BY m_group 

或者你可以使用不同的功能,如RAND(),产生于各行的单独的值。您可以将喜欢的MD5()把它的哈希函数,如果你想有一个字符串值:

SELECT *, IFNULL(m_group_name,md5(rand())) AS m_group FROM m GROUP BY m_group 
+0

这将解释为什么它看起来使用相同的值 - 感谢解释和替代答案:) – MrJ 2011-02-23 14:38:36