Вставка новой записи для каждого результата в MySQL

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Изучим тему массовой вставки, используя простой и изящный подход с использованием INSERT INTO ... SELECT для создания новых записей на основе результатов запроса:

SQL
Скопировать код
INSERT INTO my_table (col1, col2)
SELECT col1, col2
FROM your_table
WHERE choosen_condition;

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

Кинга Идем в IT: пошаговый план для смены профессии

Дальнейшее изучение массовой вставки

Детальней рассмотрим конструкцию INSERT INTO ... SELECT и разберем несколько нюансов, позволяющих делать операцию более изощренной. Таким образом, наши действия будут не просто функциональными, но и изящными.

Соблюдение уникальности

Чтобы избежать дублей, можно использовать ключевое слово DISTINCT, которое поможет сохранить уникальность данных.

SQL
Скопировать код
-- Больше не будет дубликатов!
INSERT INTO my_table (customer_id, domain)
SELECT DISTINCT customer_id, 'sql-paradise.io'
FROM your_table
WHERE type = 'foo';

Вставляем только уникальные идентификаторы customer_id с новым доменом, таким образом избегая лишних повторов.

Сохранение целостности данных

Не посягайте на исключительность первичных ключей:

SQL
Скопировать код
-- Уникальность наше все!
INSERT INTO my_table (id, customer_id, domain)
SELECT MAX(id)+1, customer_id, 'sql-paradise.io'
FROM your_table
GROUP BY customer_id;

Группировка и выбор максимального идентификатора id позволят избежать любых конфликтующих ситуаций с ключами.

Визуализация

Представим ситуацию, когда для каждой строки вашей таблицы вы отправляете новогодние подарочные наборы 🎁 в другую таблицу:

SQL
Скопировать код
INSERT INTO new_year_gifts (gift_name, delivery_date)
SELECT product_name, NOW() FROM inventory WHERE is_available = 1;

С каждой отправленной посылкой в таблице new_year_gifts появляется новая запись:

Markdown
Скопировать код
Исходная строка 🕹️           Подарочный набор 🎁
---------------              ----------------
Строка 1 🕹️   →   [Набор 1 🎁, ..., Набор N 🎁]
Строка 2 🕹️   →   [Набор 1 🎁, ..., Набор N 🎁]
Строка 3 🕹️   →   [Набор 1 🎁, ..., Набор N 🎁]

Таким образом, каждая выбранная строка 🕹️ становится источником для серии новых записей.

Дополнительные аспекты

Для более глубокого понимания темы рассмотрим некоторые непредвиденные сценарии и как их избежать.

Не перегружайте запрос

Следите за тем, чтобы SELECT не выбирал слишком много данных. Проверьте его работу отдельно, чтобы увидеть получаемый набор данных.

Тестирование и заметки

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

Продвинутые SQL-тактики

Если вы настроены на решение более сложных задач, попробуйте условную вставку:

SQL
Скопировать код
INSERT INTO my_table (id, value)
SELECT id, IF(condition, value_if_true, value_if_false)
FROM your_table;

Или займитесь работой с несколькими таблицами:

SQL
Скопировать код
INSERT INTO my_table (column1, column2)
SELECT t1.column1, t2.column2
FROM table1 t1
JOIN table2 t2 ON t1.key = t2.key;

Применяя эти методы, вы сможете точно настроить данные под ваши требования.

Полезные материалы

  1. Как вставить несколько строк одним SQL-запросом? — Stack Overflow — методы массовой вставки в MySQL.
  2. MySQL :: Руководство по MySQL 8.0 :: 15.2.7 Оператор INSERT — официальная документация MySQL по использованию оператора INSERT.
  3. MySQL :: Руководство по MySQL 8.0 :: 15.2.7.1 Оператор INSERT ... SELECT — официальное руководство по использованию INSERT ... SELECT для массовой вставки записей.
  4. MySQL – Запрос Insert — практическое пособие с примерами запросов INSERT в MySQL.
  5. SQL-оператор INSERT INTO – GeeksforGeeks — подробное объяснение оператора INSERT с примерами использования.