MySQL 函数根据数据数组将字符串评估为整数

标签 mysql sql database

我有以下 SQL 查询:

UPDATE my_records, units
SET my_records.unit_id = units.id
WHERE my_records.column_1 = units.column_1 AND my_records.column_2 = units.column_2
AND my_records.id > 0 AND my_records.id <= 1000
ORDER BY my_records.id

问题是 my_records.column_1 是一个整数,而 units.column_1 是一个字符串。但它们引用相同的数据数组:

[ 'Medical', 'Legal', 'Auto', 'Electrical', 'Software', 'Education' ]

因此,my_records.column_1 可以为 0,units.column_1 可以为“医疗”。但我可以看出“Medical”为 0,因为它是数组的第一个元素。

是否有一个函数可以传递给 MySQL 将“Medical”字符串转换为适当的索引(例如 0)?

最佳答案

使用JOIN和表别名编写查询

UPDATE my_records r JOIN
       units u
       ON r.column_1 = u.column_1 AND r.column_2 = u.column_2
    SET r.unit_id = u.id
WHERE r.id > 0 AND r.id <= 1000
ORDER BY my_records.id;

现在,您想要进行转换。最简单的方法可能是像 FIELD() 这样的函数:

UPDATE my_records r JOIN
       units u
       ON r.column_1 = FIELD(u.column_1, 'Medical', 'Legal', 'Auto', 'Electrical', 'Software', 'Education') AND
          r.column_2 = u.column_2
    SET r.unit_id = u.id
WHERE r.id > 0 AND r.id <= 1000
ORDER BY my_records.id;

注意:您可能需要调整 FIELD() 返回的值,因为它是从 1 开始的。

也就是说,如果您在没有引用表的情况下存储这样的值,那么您的数据模型就会出现问题。您确实应该加入引用表来消除代码的歧义。

关于MySQL 函数根据数据数组将字符串评估为整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53310823/

相关文章:

mysql - 更新列同表

php - 如何将我的表复制到转储表并删除主表中的值

database - 帮助设计数据库

database - 改变mongodb在mac中的位置

mysql - 有什么方法可以选择而不会导致 MySQL 锁定?

mysql - 在ansible中创建具有mysql角色的复制用户时出错

sql - 如何从 SQL Server DateTime 数据类型仅返回日期

asp.net - 是否有比升级到 Visual Studio 2010 Ultimate 更便宜的负载测试方法

MySql从关联表中获取所有记录的状态

java - 将 java 整数数组作为参数传递给 postgres 过程