当前位置: 首页 > 面试题库 >

MySql从表中获取唯一单词的列表,其中字段中的值用逗号分隔

姚俊材
2023-03-14
问题内容

我不确定使用纯SQL(MySQL)是否可以实现,但是无论如何我都会问。我有一个这样的表:

ID    TAGS
-----------------------------
1     word1,word2,word3
2     word2,word4
3     word3,word5,word6,word7
...

我想从标签字段中选择一个所有唯一的单词,以获得类似这样的内容:

TAGS
-----
word1
word2
word3
word4
word5
word6
word7

问题答案:

您可以在SQL中执行此操作,尽管它不是很漂亮。

select distinct reverse(substring_index(reverse(substring_index(tags, ',', n.n)), ',', 1)) as word
from t cross join
     (select 1 as n union all select 2 as n union all select 3 as n union all select 4 as n) n
having word is not null

您需要确保子查询的n每个标签中至少包含单词数。

这是演示此的SQLFiddle。

这是将原始数据与序列号交叉连接。然后,使用从标签字符串中选择第n个值substring_index()

要获得最大数量的标签,您可以执行以下操作:

select max(length(tags) - length(replace(tags, ',', 1))+1
from t


 类似资料:
  • 问题内容: 我从名为的表中获取记录。 架构图 实际上,我的功能是根据 我在此搜索中分配的工作来搜索披萨。但我找不到合适的解决方案。。 我不能使用子句来获取记录。 我已经尝试了: 1) 问题:获取所有具有价值的记录 2) 但MySQL返回的结果集为空, 如果以逗号分隔的值与任何记录都不匹配,则返回列中最有价值的结果。 例:如果我在上面的查询中查找了具有1,2,3,4 topping_id的披萨,但是

  • 问题内容: 我想从以下列表中获取唯一值: 我需要的输出是: 此代码有效: 我应该使用更好的解决方案吗? 问题答案: 首先正确声明你的列表,以逗号分隔。你可以通过将列表转换为一组来获得唯一值。 如果进一步将其用作列表,则应执行以下操作将其转换回列表: 另一种可能(可能更快)的可能性是从头开始使用集合而不是列表。然后你的代码应为: 正如已经指出的那样,集合不保持原始顺序。如果需要,则应查找有序集合实现

  • 问题内容: 我想创建一个(或一组)所有出现在python列表中的唯一值的列表。我有这样的事情: 我想要以下内容: 我知道对于字符串列表,您只能使用set(aList),但是我无法弄清楚如何在列表列表中解决此问题,因为set(aList)会向我显示错误消息 我该如何解决? 问题答案:

  • 问题内容: 我有一个看起来像这样的列表列表: 删除重复列表的最佳方法是什么?使用上面的示例,我正在寻找会产生这种情况的代码: 我最初以为我可以使用,但这似乎不适用于列表列表。我还看到了一个使用的示例,但是代码对我来说并不完全清楚。谢谢您的帮助! 问题答案: uniq_animal_groups = set(map(tuple, animal_groups)) 尽管您将得到一组元组而不是一组列表,但

  • 问题内容: 我有一个其中有很多记录的记录,我想知道其中有多少个名字,以及其中一个名字多少时间。 表名 我想找到多少个名字及其数量。 预期的输出应该是这样的 帮助我解决它。 问题答案: 结果:

  • 是有效输入。 无效 有效 无效 无效(只有7个数字) 我尝试了,但它接受重复的数字