使用带有逗号值的 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 更新查询作为带有一些空值的选择查询