【问题标题】:How can I select a list of distinct values from a field of comma separated values? [duplicate]如何从逗号分隔值的字段中选择不同值的列表? [复制]
【发布时间】:2020-01-19 12:47:16
【问题描述】:

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

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

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

我试图弄清楚如何从该列中简单地选择所有唯一类别 ID 的列表,如下所示:

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

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

【问题讨论】:

标签: mysql sql


【解决方案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 派生表扩展到列表中的最大元素数。

【讨论】:

    猜你喜欢
    • 2021-01-19
    • 1970-01-01
    • 1970-01-01
    • 2012-03-20
    • 2020-08-02
    • 2023-03-21
    • 1970-01-01
    • 2017-05-12
    • 1970-01-01
    相关资源
    最近更新 更多