使用带有逗号值的 WHERE 的 SQL [重复]

Posted

技术标签:

【中文标题】使用带有逗号值的 WHERE 的 SQL [重复]【英文标题】:SQL using WHERE with comma values [duplicate] 【发布时间】:2020-10-07 08:54:41 【问题描述】:

我有 product_id 列,其中包含 TEXT 数据类型中的数据 30ed1476c6d04337b02f783079c2290f, a3b14b2d2603499393cde6bf120a059e。我组合了 2 个产品 ID 并使用 implode 将其保存到 db。现在我的问题是如何使用 1 个产品 ID 获取数据。

例如SELECT * FROM table1 WHERE product_id = 30ed1476c6d04337b02f783079c2290f

【问题讨论】:

使用like 而不是where mysql 字段中的逗号列表不可搜索。在您对这种结构走得太远之前,请先查找规范化。​​ 这看起来像是糟糕的数据库设计,请阅读database normalization SELECT * FROM table1 WHERE product_id like '%30ed1476c6d04337b02f783079c2290f%' 【参考方案1】:

您首先应该努力修复您的数据模型;您应该有一个单独的映射表,其中每个值都将存储在单独的行中。将 csv 数据存储在关系表中是许多弊端的根源。见:Is storing a delimited list in a database column really that bad?

也就是说,对于您当前的架构,您可以使用string function find_in_set()

select *
from table1
where find_in_set('30ed1476c6d04337b02f783079c2290f', product_id)

【讨论】:

以上是关于使用带有逗号值的 WHERE 的 SQL [重复]的主要内容,如果未能解决你的问题,请参考以下文章

带有 where 条件的 PL/SQL 更新查询作为带有一些空值的选择查询

获取用逗号分隔的值的计数[重复]

如何在objc中使用带有多个where值的select语句?

带有逗号分隔值的 Codeigniter Mysql 列

一个带有两个where子句的查询中的两个sql总和[重复]

SQL Server用逗号分隔[重复]