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

时间:2018-11-15 00:34:35

标签: 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)?

1 个答案:

答案 0 :(得分: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的。

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