我有一个包含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
请帮忙吗?
由于
答案 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_1
,color_2
,color_3
,color_4
)并将其统一在唯一表,有一列名为color
。然后查询此表,使用4列中的所有颜色,将DISTINCT
应用于它们。