MySQL 由 space 分隔的不同单词与单个列
MySQL distinct word that separated by space from a single column
假设我有一列标签。此标签由 space.
分隔
|tags |
|apple banana melon |
|apple banana pineapple|
|apple melon pineapple |
我想获取列标签中的所有单词,用 space 分隔并删除重复的单词。所以我会得到这样的输出:
|unique_tags|
|apple |
|banana |
|melon |
|pineapple |
如何在 mysql 中执行此操作?
首先你应该更好地重构你的数据库模式。
但我看到很多这样的问题,我更喜欢 this 解决方案。
如果您同意,您可以这样调整它以适应您的情况:
http://sqlfiddle.com/#!9/2fd5e/7
SELECT DISTINCT
SUBSTRING_INDEX(SUBSTRING_INDEX(t1.tags, ' ', numbers.n), ' ', -1) tag
FROM
numbers
INNER JOIN t1
ON CHAR_LENGTH(t1.tags)
-CHAR_LENGTH(REPLACE(t1.tags, ' ', ''))>=numbers.n-1
提到您必须创建 numbers
table,记录数和连续值直到您在 tags
字段列表中期望的最大数值。
假设我有一列标签。此标签由 space.
分隔|tags |
|apple banana melon |
|apple banana pineapple|
|apple melon pineapple |
我想获取列标签中的所有单词,用 space 分隔并删除重复的单词。所以我会得到这样的输出:
|unique_tags|
|apple |
|banana |
|melon |
|pineapple |
如何在 mysql 中执行此操作?
首先你应该更好地重构你的数据库模式。
但我看到很多这样的问题,我更喜欢 this 解决方案。
如果您同意,您可以这样调整它以适应您的情况:
http://sqlfiddle.com/#!9/2fd5e/7
SELECT DISTINCT
SUBSTRING_INDEX(SUBSTRING_INDEX(t1.tags, ' ', numbers.n), ' ', -1) tag
FROM
numbers
INNER JOIN t1
ON CHAR_LENGTH(t1.tags)
-CHAR_LENGTH(REPLACE(t1.tags, ' ', ''))>=numbers.n-1
提到您必须创建 numbers
table,记录数和连续值直到您在 tags
字段列表中期望的最大数值。