SQL DISTINCT查询,从表中获取唯一的颜色

时间:2014-05-01 15:23:44

标签: mysql sql

我有一个包含4列的表,每列都有一个HEX值的颜色(参见下面的捕获)

color_1 | color_2 | color_3 | color_4 |

#a0a0a0 | #f0f0f0 | #404040 | #e0e0e0 |
#e0e0e0 | #f0f0f0 | #c0c0c0 | #e06080 |
#e0e0e0 | #f0f0f1 | #c0c0c0 | #e06082 |
#e0e0e0 | #f0f0f0 | #c0c0c0 | #e06080 |

我想查询整个表格以获得保存的独特颜色,我按照以下方式执行

SELECT DISTINCT color_1, color_2, color_3, color_4
FROM `wp_images`

我得到的结果不是我所期望的(见下面的捕获)

color_1 | color_2 | color_3 | color_4 |

#a0a0a0 | #f0f0f0 | #404040 | #e0e0e0 |
#e0e0e0 | #f0f0f0 | #c0c0c0 | #e06080 |
#e0e0e0 | #f0f0f1 | #c0c0c0 | #e06082 |
#e0e0e0 | #f0f0f0 | #c0c0c0 | #e06080 |

我期望的结果是:

#a0a0a0 , #f0f0f0 , #404040 , #e0e0e0 , #f0f0f1 , #c0c0c0 , #e06080 , #e06082

请帮忙吗?

由于

2 个答案:

答案 0 :(得分:3)

使用UNION可以合并不同的结果。它本身也可以从结果中删除重复项。

SELECT color1 FROM wp_images
UNION
SELECT color2 FROM wp_images
UNION
SELECT color3 FROM wp_images
UNION
SELECT color4 FROM wp_images

我实际上更喜欢将GROUP BY color(n)放在每个查询的末尾,或者使用SELECT DISTINCT。它使行为更加清晰,但实际上并非必要。


更好的是,使用不同的表结构。

 item_num | color_num | color
----------+-----------+-------
     1    |      1    | <#a0a0a0>
     1    |      2    | <#f0f0f0>
     1    |      3    | <#404040>
     1    |      4    | <#e0e0e0>
     2    |      1    | <#e0e0e0>
     2    |      2    | <#f0f0f0>
     2    |      3    | <#c0c0c0>
     2    |      4    | <#e06080>

答案 1 :(得分:0)

试试这个:

SELECT DISTINCT color
FROM
(
SELECT color_1 as color FROM `wp_images`
UNION
SELECT color_2 as color FROM `wp_images`
UNION
SELECT color_3 as color FROM `wp_images`
UNION
SELECT color_4 as color FROM `wp_images`
)

内部SELECT获取表格中的每列的列表(color_1color_2color_3color_4)并将其统一在唯一表,有一列名为color。然后查询此表,使用4列中的所有颜色,将DISTINCT应用于它们。