您好我有一张由懒惰的开发人员设计的桌子,他没有以第3范式创建它。他将数组保存在表中而不是使用MM关系。并且应用程序正在运行,因此我无法更改数据库架构。
我需要像这样查询表:
SELECT * FROM myTable WHERE usergroup = 20
其中usergroup字段包含如下数据:17,19,20或者它也可能只有20或只有19。
我可以搜索: SELECT * FROM myTable WHERE用户组LIKE 20 但在这种情况下,它也会匹配包含200的字段,例如
有人有什么想法吗? 感谢名单
答案 0 :(得分:4)
修复错误的数据库设计。
短期修复是为正确的结构添加相关表。添加触发器以将旧字段中的信息解析为插入和更新时的相关表。然后编写一个脚本来[解析现有数据。现在你可以通过porperly查询,但你没有破坏任何旧代码。那么你可以搜索旧代码并修复。完成后,只需更改原始表中插入或更新代码的方式,即可添加新表并删除旧列。
答案 1 :(得分:0)
编写一个表值用户定义函数(SQL Server中的UDF,我相信它在其他RDBMS中将有一个不同的名称)来解析包含存储为字符串的列表的列的值。对于逗号分隔列表中的每个项目,您的函数应在表结果中返回一行。当您使用这样的查询时,请查询从UDF返回的结果。
答案 2 :(得分:0)
编写一个函数将逗号分隔的列表转换为表格。应该很简单。然后你可以使用IN()。