2012-05-09 45 views
0

比方說,我有ID(主鍵列)和Val列(類型SETwith一些允許值):選擇不同的SET值作爲單個mysql列嗎?

set('a','b','c','d','e','f') 

我需要頂部選擇這些值一列,與第一列是ID

+-----+------+ 
| id | val | 
+-----+------+ 
| 102 | 'a' | 
| 102 | 'e' | 
| 102 | 'f' | 

不知道如何才能實現這一目標..

select id, ???? from table where id = 102; 
+0

你或許應該破除你'SET'和[歸一化(HTTP://en.wikipedia。 org/wiki/Database_normalization)將數據與一個單獨的表相關聯,該表將本表中的id與現有的SET的內容聯繫起來:即這個新表看起來很像上面所需的輸出。 – eggyal

+0

可能的重複:http://stackoverflow.com/questions/1096679/can-mysql-split-a-column – Madbreaks

+0

@eggyal:我ssssoooooo不想這樣做:)但是 - 是的 - 那會工作。 – Stann

回答

0

正如我在評論中提及上面,你應該normalize您的數據,使這個問題完全消失。

但是,根據現狀,需要加入一張表格,其中包含所有可能的SET值,其中此值在記錄的SET;你可以保持該表的永久副本,或者用UNION子查詢動態構建它:

SELECT my_table.id, set_options.val 
FROM my_table JOIN (
      SELECT 'a' AS val 
    UNION ALL SELECT 'b' UNION ALL SELECT 'c' UNION ALL SELECT 'd' 
    UNION ALL SELECT 'e' UNION ALL SELECT 'f' 
) AS set_options ON FIND_IN_SET(set_options.val, my_table.val) > 0 
WHERE id = 102