如何从逗号分隔值的字段中选择不同值的列表?

时间:2019-09-18 14:12:49

标签: mysql sql

我正在处理一个设计不佳的旧数据库,过渡到新系统。

产品通过以下方式与类别相关联:

|------------|------------------|
| product_id |   category_ids   |
|------------|------------------|
| 12         |   34,52,105      |
|------------|------------------|
| 14         |   34,52,192      |
|------------|------------------|

我正在尝试找出如何从该列中选择所有唯一类别ID的列表,就像这样:

|-------------|
| category_id |
|-------------|
| 34          |
|-------------|
| 52          |
|-------------|
| 105         |
|-------------|
| 192         |
|-------------|

任何帮助将不胜感激,谢谢!

1 个答案:

答案 0 :(得分:1)

以下是在MySQL中使用隐式转换“技巧”的方法:

select distinct substring_index(t.category, ',', -n) + 0
from (select 1 as n union all select 2 union all select 3
     ) n cross join
     t

这从末尾得到第n个元素 。然后使用+ 0转换为数字。转换在逗号处停止,因此从末尾获得第n个值。

您可以将n派生表扩展到列表中的最大元素数。