- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个比较,我想在 SQL 中提高效率。
输入字段 (fldInputField) 是逗号分隔的“1,3,4,5”列表
数据库有一个字段(fldRoleList),其中包含“1,2,3,4,5,6,7,8”
因此,对于 fldRoleList 中第一次出现的 fldInputField,请告诉我们它是哪个值。
有没有办法在 MySQL 或存储过程中实现以下功能?
伪代码
选择 *从表 t1在 t1.fldRoleList 中的 WHERE fldInputField
/伪代码
我猜可能有一些函数最适合这种类型的比较?我在搜索中找不到任何内容,如果有人可以指导我,我会删除问题...谢谢!
更新:这不是做事的理想(或好的)方式。它是继承的代码,我们只是试图快速修复,同时我们着眼于构建逻辑以通过规范化行处理此问题。幸运的是,这不是大量使用的代码。
最佳答案
我同意@Ken White 的 answer逗号分隔列表在规范化数据库设计中没有位置。
如果您将 fldRoleList
存储为从属表中的多行,则解决方案会更简单并且性能会更好:
SELECT t1.*, r1.fldRole
FROM aTable t1 JOIN aTableRoles r1 USING (aTable_id)
WHERE FIND_IN_SET(r1.fldRole, fldInputField);
(见MySQL函数FIND_IN_SET()
)
但是如果多个角色匹配以逗号分隔的输入字符串,则输出多行。如果您需要将结果限制为每个 aTable
条目一行,并使用 first 匹配角色:
SELECT t1.*, MIN(r1.fldRole) AS First_fldRole
FROM aTable t1 JOIN aTableRoles r1 USING (aTable_id)
WHERE FIND_IN_SET(r1.fldRole, fldInputField);
GROUP BY t1.aTable_id;
关于SQL Un-Wizardry : Compare values from one list in another,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/826149/
我有一个比较,我想在 SQL 中提高效率。 输入字段 (fldInputField) 是逗号分隔的“1,3,4,5”列表 数据库有一个字段(fldRoleList),其中包含“1,2,3,4,5,6,
我是一名优秀的程序员,十分优秀!