gpt4 book ai didi

SQL Un-Wizardry : Compare values from one list in another

转载 作者:行者123 更新时间:2023-11-29 04:31:52 24 4
gpt4 key购买 nike

我有一个比较,我想在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com