Копирование данных между строками таблицы
При управлении базами данных часто необходимо обновлять строки на основе данных из других строк таблицы. тот же стол. Рассмотрим таблицу со столбцами ID, NAME и VALUE, которая содержит повторяющиеся значения NAME, а именно:
ID | NAME | VALUE | ---------------------------- 1 | Test | VALUE1 | 2 | Test2 | VALUE2 | 1 | Test2 | | 4 | Test | | 1 | Test3 | VALUE3 |
Предположим, мы хотим обновить пустые поля VALUE в строках с повторяющимися значениями NAME. Чтобы добиться этого, мы можем использовать SQL-запросы, которые ссылаются и обновляют значения в одной и той же таблице.
Один из подходов предполагает использование оператора UPDATE с объединением. В следующем запросе мы дважды присоединяемся к data_table, присваивая им псевдонимы dt1 и dt2:
UPDATE data_table dt1, data_table dt2 SET dt1.VALUE = dt2.VALUE WHERE dt1.NAME = dt2.NAME AND dt1.VALUE = '' AND dt2.VALUE != ''
Этот запрос идентифицирует и обновляет пустые поля VALUE (где dt1.VALUE пусто) с непустыми ЗНАЧЕНИЯ из других строк с тем же ИМЯ (где dt2.VALUE не пусто).
В качестве альтернативы мы можем использовать подзапрос, чтобы идентифицировать строки с непустыми ЗНАЧЕНИЯМИ и присоединить их обратно к исходной таблице. для обновления:
UPDATE data_table t, (SELECT DISTINCT ID, NAME, VALUE FROM data_table WHERE VALUE IS NOT NULL AND VALUE != '') t1 SET t.VALUE = t1.VALUE WHERE t.ID = t1.ID AND t.NAME = t1.NAME
Оба этих запроса дадут желаемый результат:
ID | NAME | VALUE | ---------------------------- 1 | Test | VALUE1 | 2 | Test2 | VALUE2 | 1 | Test2 | VALUE2 | 4 | Test | VALUE1 | 1 | Test3 | VALUE3 |
Эти подходы обеспечивают гибкость при манипулировании данными в таблице, позволяя обновлять значения на основе критериев, включающих другие строки в той же таблице.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3