0

嗨,我有一个表,它是由一个懒惰的开发人员设计的,他没有以第三范式创建它。他将数组保存在表中,而不是使用 MM 关系。并且应用程序正在运行,因此我无法更改数据库架构。

我需要像这样查询表:

SELECT * FROM myTable WHERE 用户组 = 20

其中 usergroup 字段包含这样的数据:17,19,20 或者也可能只有 20 或只有 19。

我可以像这样搜索: SELECT * FROM myTable WHERE usergroup LIKE 20 但在这种情况下,它也会匹配包含 200 的字段,例如

有人知道吗?谢谢

4

3 回答 3

4

修复不良的数据库设计。

短期解决方法是为正确的结构添加相关表。添加触发器以在插入和更新时将旧字段中的信息解析到相关表中。然后编写一个脚本来[解析出现有数据。现在您可以正常查询,但您没有破坏任何旧代码。然后你可以搜索旧代码并修复。完成此操作后,只需更改在原始表中插入或更新代码的方式即可添加新表并删除旧列。

于 2009-10-12T20:51:19.923 回答
0

编写一个函数以将逗号分隔的列表转换为表格。应该很简单。然后你可以使用 IN()。

于 2009-10-13T01:52:00.713 回答
0

编写一个表值用户定义函数(SQL Server 中的 UDF,我确信它在其他 RDBMS 中会有不同的名称)来解析包含存储为字符串的列表的列的值。对于逗号分隔列表中的每个项目,您的函数应在表结果中返回一行。当您使用这样的查询时,请针对从 UDF 返回的结果进行查询。

于 2009-10-12T20:40:56.853 回答