【发布时间】:2014-07-23 13:46:17
【问题描述】:
我有结构表
id| list (VARCHAR)
--|-------
1 | a, b, c
2 | b, c, d
3 | a
我想在其他查询中使用逗号分隔列表中的单个值作为过滤器。 我想我会用这样的查询来实现这一点
SELECT * FROM A WHERE column1 IN (SELECT list FROM B WHERE id = 1)
但是这种方式我使用价值
a, b, c
不作为过滤器,例如,
a
我需要它作为过滤器。
我怎样才能做到这一点?
【问题讨论】:
-
修复您的数据库结构,这样您就不会将列表存储在逗号分隔的字符串中。 SQL 有一个很好的存储列表的特性。它被称为表。
-
我无法更改数据库结构 ;)
-
“列表”是什么数据类型...设置?如果是这样,您可能需要使用 FIND_IN_SET dev.mysql.com/doc/refman/5.0/en/set.html 或
Like运算符不是最佳性能,但如果您必须忍受现有的... -
@xQbert 列表列类型为 VARCHAR
-
你如何确定应该从逗号分隔值的字符串列表中返回什么“单个”值?为什么是 a 而不是 c 或 b?不管我认为如果您不能更改数据库结构,最好的方法是编写一个用户定义的函数,该函数将返回系列中的第一个值,除非用户指定要返回的系列中的位置,在这种情况下 UDF 将返回该职位的价值。您无法转换为可能有帮助的设置数据类型或从该数据类型转换,因此如果结构无法更改,UDF 似乎最好;因为从长远来看,您会需要它。