【问题标题】:Merge mysql columns to rows将mysql列合并到行
【发布时间】:2013-03-15 14:47:11
【问题描述】:

我有一个结构如下的表:

+-----+------------+------------+------------+------------+
| ID  |  FEATURE1  |  FEATURE2  |  FEATURE3  |  FEATURE4  |
+-----+------------+------------+------------+------------+
|  1  |  red       |  blue      |  black     |  grey      |
|  2  |  yellow    |            |            |            |
|  3  |  orange    |  red       |  green     |  golden    |
|  4  |  orange    |  grey      |  blue      |            |

我想做的是查询表并返回所有可能的功能以在自动完成调用中使用。我需要查询只返回唯一值。

SELECT (FEATURE1, FEATURE2, FEATURE3, FEATURE4, FEATURE5) FEATURE
FROM products
WHERE `FEATURE` LIKE 'gr%\'

我想要的输出是:

+----------+
| FEATURE  |
+----------+
|  green   |
|  grey    |

【问题讨论】:

  • 连接所有列并使用 'gr%' 过滤。
  • 返回唯一值或不同值?

标签: mysql sql merge


【解决方案1】:

基本上,您可以使用UNION 将所有列组合在一行中。

SELECT  * 
FROM
(
    SELECT FEATURE1 FEATURE FROM TableName
    UNION
    SELECT FEATURE2 FEATURE FROM TableName
    UNION
    SELECT FEATURE3 FEATURE FROM TableName
    UNION
    SELECT FEATURE4 FEATURE FROM TableName
) sub
WHERE   FEATURE LIKE 'gr%'

【讨论】:

  • 谢谢,完美。我有几个问题。我应该在 FEATURE 列上添加索引吗?
  • 我应该在 FEATURE 列上添加索引吗? MYSQL 如何知道选择 DISTINCT 值?如果我希望这张表保存大量记录,我真的应该创建一个单独的表来存储特征吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-16
  • 2012-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-09
相关资源
最近更新 更多