2011-02-23 259 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