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

根据列中的逗号分隔值从MySQL表中获取记录

朱雅惠
2023-03-14
问题内容

我从名为的表中获取记录Pizza_Table

Pizza_table 架构图

id | pizza name | pizza_topping_ids
1  | pizza1     |1,2,3
2  | pizza2     |2,3
3  | pizza3     |4,5,6

实际上,我的功能是根据pizza_topping_ids 我在此搜索中分配的工作来搜索披萨。但我找不到合适的解决方案。。

我不能使用IN子句来获取记录。

我已经尝试了:

1)

 SELECT * 
 FROM `pizza_table` 
 WHERE `pizza_topping_id` REGEXP '[[:<:]]2[[:>:]]'

问题:获取所有具有价值的记录 2

2)

SELECT * 
FROM `pizza_table` 
WHERE `pizza_topping_id` REGEXP '[[:<:]]1,2,3,4[[:>:]]'

但MySQL返回的结果集为空,

如果以逗号分隔的值与任何记录都不匹配,则返回topping_id列中最有价值的结果。

例:如果我在上面的查询中查找了具有1,2,3,4
topping_id的披萨,但是在数据库中不存在具有topping_id组合的披萨,那么结果将是覆盖最多的ID,应显示为’pizza1’具有pizza_topping_id1,2,3

对不起,英语以及格式也很糟糕,但是请尝试理解我的问题。提前致谢。

请帮我。


问题答案:

只需尝试-

SELECT * FROM `pizza_table` WHERE  FIND_IN_SET(2,pizza_topping_id)

或REGEXP

SELECT * FROM `pizza_table` WHERE pizza_topping_id REGEXP '^2,|,2$|,2,' OR pizza_topping_id =2

请看演示:demo



 类似资料:
  • 问题内容: 我正在从存储过程中调用Scalar UDF以获取列值。在标量UDF内,我有一个xml,并且必须获取特定节点的逗号分隔值。我使用了Cross apply,但是它导致了巨大的性能瓶颈,因为存储过程实际上是用来获取报告的。 有一个[旅行者]表,其中包含字段ID,BookingID(可以重复)和FareDetails。在FareDetails内部,我们存储xml。 UDF内部的逻辑如下:第一解

  • 问题内容: 我不确定使用纯SQL(MySQL)是否可以实现,但是无论如何我都会问。我有一个这样的表: 我想从标签字段中选择一个所有唯一的单词,以获得类似这样的内容: 问题答案: 您可以在SQL中执行此操作,尽管它不是很漂亮。 您需要确保子查询的每个标签中至少包含单词数。 这是演示此的SQLFiddle。 这是将原始数据与序列号交叉连接。然后,使用从标签字符串中选择第n个值。 要获得最大数量的标签,

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

  • 问题内容: 我的一个表中有一列,其中存储多个用逗号分隔的ID。有没有一种方法可以在查询的“ IN”子句中使用此列的值。 column()的值类似于 我需要用作 我对Crozin的回​​答感到满意,但我愿意接受建议,观点和选择。 随时分享您的观点。 问题答案: 以@Jeremy Smith的FIND_IN_SET()示例为基础,您可以使用联接来完成此操作,因此不必运行子查询。 这是众所周知的非常表现

  • 问题内容: 我需要运行类似的查询: 但是我希望子选择返回逗号分隔的列表,而不是数据列。这有可能吗?如果可以,怎么办? 问题答案: 您可以使用GROUP_CONCAT执行该操作,例如

  • 问题内容: 表格Jobs有2列JobId,保存工作位置时的城市可能是多个城市,如下所示 我想如何在类似城市的城市中计算Jobid想要在纽约市中计算Jobid的结果 纽约3俄亥俄州1弗吉尼亚2 问题答案: 为了获得用逗号分隔的不同值的计数,可以在查询之上运行,但是要获得正确的结果,您应该再使用一个表,该表只有一个列num整数类型,并插入一些值。如果在此情况下在GROUP_CONCAT(城市分隔符’,