查询非正常第三种形式的表
您好,我有一个表是由一个懒惰的开发人员设计的,他没有以第三范式创建它。他将数组保存在表中,而不是使用 MM 关系。并且应用程序正在运行,因此我无法更改数据库架构。
我需要像这样查询表:
SELECT * FROM myTable WHERE usergroup = 20
其中 usergroup 字段包含如下数据:17,19,20 或者它也可能只有 20 或只有 19。
我可以使用如下搜索: 从 myTable 中选择 * 其中用户组类似于 20 但在这种情况下,它也会匹配包含 200 的字段,例如
有人知道吗? 谢谢
Hi I have a table which was designed by a lazy developer who did not created it in 3rd normal form. He saved the arrays in the table instead of using MM relation . And the application is running so I can not change the database schema.
I need to query the table like this:
SELECT * FROM myTable
WHERE usergroup = 20
where usergroup field contains data like this : 17,19,20 or it could be also only 20 or only 19.
I could search with like:
SELECT * FROM myTable
WHERE usergroup LIKE 20
but in this case it would match also for field which contain 200 e.g.
Anybody any idea?
thanx
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
修复错误的数据库设计。
短期修复方法是添加相关表以获得正确的结构。添加触发器以在插入和更新时将旧字段中的信息解析到相关表中。然后编写一个脚本来[解析出现有数据。现在您可以正确查询,但您没有破坏任何旧代码。然后你可以搜索旧代码并修复。完成此操作后,只需更改在原始表中插入或更新代码的方式即可添加新表并删除旧列。
Fix the bad database design.
A short-term fix is to add a related table for the correct structure. Add a trigger to parse the info in the old field to the related table on insert and update. Then write a script to [parse out existing data. Now you can porperly query but you haven't broken any of the old code. THen you can search for the old code and fix. Once you have done that then just change how code is inserted or udated inthe orginal table to add the new table and drop the old column.
编写一个表值用户定义函数(SQL Server 中的 UDF,我确信它在其他 RDBMS 中会有不同的名称)来解析包含存储为字符串的列表的列的值。对于逗号分隔列表中的每个项目,您的函数应在表结果中返回一行。当您使用这样的查询时,请针对从 UDF 返回的结果进行查询。
Write a table-valued user-defined function (UDF in SQL Server, I am sure it will have a different name in other RDBMS) to parse the values of the column containing the list which is stored as a string. For each item in the comma-delimited list, your function should return a row in the table result. When you are using a query like this, query against the results returned from the UDF.
编写一个函数将逗号分隔列表转换为表格。应该很简单。然后你可以使用IN()。
Write a function to convert a comma delimited list to a table. Should be pretty simple. Then you can use IN().