MySQL функция для оценки строки как целого числа на основе массива данных - PullRequest
0 голосов
/ 15 ноября 2018

У меня следующий запрос 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 голосов
/ 15 ноября 2018

Напишите запрос, используя 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.

ТоТем не менее, у вас есть проблема с вашей моделью данных, если вы храните такие значения без справочной таблицы.Вы действительно должны присоединиться к справочной таблице для устранения неоднозначности кодов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...