我正在尝试对列m_group_name
进行分组(或至少使其唯一),除非该组为空。这是基本上看到还没有一个组(然后可以编辑为一个组),同时能够看到现有的组。
例如;
id | m_group_name
---------------------
1 | Red
2 | Blue
3 |
4 | Red
5 |
理想情况下,会产生一个红色,一个蓝色和两个空白。
我尝试将空白设为NULL并给它一个UUID值(在调整Stackoverflow上的类似内容之后),但它似乎使每个NULL都具有相同的值。
SELECT *, IFNULL(m_group_name,UUID()) AS m_group FROM m GROUP BY m_group
理想情况下,我宁愿不使用NULL来完全诚实
修改 意识到“m_group_name”在示例中被错误地标记为“组” - 已更正。
答案 0 :(得分: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
答案 1 :(得分:0)
SELECT * FROM m WHERE LENGTH(Group) IN (0, NULL)
* LENGTH(NULL)
将返回NULL
。 LENGTH('')
将返回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)