我有一个表 T 有几列,其中 1 列有逗号分隔值。我想以下列方式处理此列并更新所有行
该列包含诸如“15,20”之类的值;“30,15,50”(不按排序顺序)。并且只有 10 个不同的可能值
处理逻辑
根据分隔符 (,) 拆分列 在结果列表中查找最大值。根据最大值,使用特定值更新列。
我是 Mysql 脚本的新手。因此,如果您能提供一些有关如何解决此问题的指示,将会很有帮助
我有一个表 T 有几列,其中 1 列有逗号分隔值。我想以下列方式处理此列并更新所有行
该列包含诸如“15,20”之类的值;“30,15,50”(不按排序顺序)。并且只有 10 个不同的可能值
根据分隔符 (,) 拆分列 在结果列表中查找最大值。根据最大值,使用特定值更新列。
我是 Mysql 脚本的新手。因此,如果您能提供一些有关如何解决此问题的指示,将会很有帮助
除了我确信这不是这样做的方法之外,还有一种方法。但是我不能足够强调数据库设计是一个问题,以及在 sql 中执行此逻辑的决定。这不应该。
请不要这样做。话说回来...
你需要这个,我想从你的问题中理解:
第一个是最难的。例如,请参阅有关爆炸的问题和字符串函数的 mysql 手册(尤其是注释)。可以做到,但是您需要做一些技巧,并利用您对字符串限制的知识(数量,它们的形成方式等),您可能可以SUBSTRING_INDEX
像这些示例中那样做一些骇人听闻的事情。
如果您有单独的值,则可以比较它们以找到最高值。您也许可以使用 sqlMAX
函数,但是当您进行所有 substring-split-explode 黑客攻击时,进行比较可能会更快。
现在你有了一个值,你可以使用某种CASE
语句来硬编码效果,或者在查询中输入它。
数据库设计看起来有问题,但这可能是一个正当的理由。您可以更改的内容也可能受到限制(例如,它不是您的数据库),因此给定的就是给定的。悲伤但真实。
您需要在 sql 中执行此操作的事实,我很难做到这一点。应该有人有理由想要这个,而那个人可能是错的。你能去找这个人,找出原因吗?
这家伙在这里从列表中选择最大的数字(您可以从 mySQL UI 即时/查询窗口或命令行运行此代码进行测试):
SET @foo = CONCAT('SELECT ', REPLACE('40,50,10,20', ',', ' UNION ALL SELECT '));
SET @foo = CONCAT('SELECT * FROM (', @foo, ' ORDER BY 1 DESC) AS uncleFoo LIMIT 1');
PREPARE STMT FROM @foo;
EXECUTE STMT;
DEALLOCATE PREPARE STMT;
UPDATE myTable SET myField=[value from above @foo execution] WHERE [your clause]