Space Base Space Base
+7 928 008-80-89
ru
  • en
  • es
  • Главная
  • Услуги
  • Портфолио
  • Библиотека
  • Контакты
  • Главная
  • Услуги
  • Портфолио
  • Библиотека
  • Контакты
  1. Библиотека
  2. SQL
  3. Копирование в таблицу данных из другой таблицы запросом SQL
logo

Копирование в таблицу данных из другой таблицы запросом SQL

17.08.2016

Механизмы объединения или обновления информации на основе нескольких источников всегда напрямую зависят от конкретных условий: от видов данных, объемов, структуры и их исходной формы.

Рассмотрим такую задачу: добавить в имеющуюся таблицу товаров новое поле с ценой. Причем список товаров измеряется сотнями тысяч записей, а данные с ценами имеются в отдельном прайс-листе. Соответственно, нужно сопоставить артикулы товаров и перенести цены товаров в основную таблицу.

В таком случае, сразу же возникает желание сделать все просто и надежно:

1. импортируем данные из файла прайс-листа в специально созданную таблицу;

2. создаем PHP обработчик, который циклом выбирает по одной записи из таблицы с ценой и SQL запросом обновляет основную таблицу (по одной или несколько записей).

Минус такого решения в том, что помимо самого переноса данных, нужно еще как-то реализовать выполнение такого кода. Ведь время обработки такой процедуры может быть достаточно длительным, и сервер может просто не позволить выполнить его целиком. Поэтому, придется еще предусмотреть, как можно выполнить эту процедуру в несколько этапов.

В итоге, такое решение создаст нам еще несколько проблем, победив которые мы все же сделаем то, что хотим.

А вот чтобы не создавать себе новых проблем, можно выполнить основную часть этой задачи непосредственно запросом SQL. Конечно здесь так же придется подготовить таблицу с информацией о ценах.

Итак, имеем две таблицы:

1. products с полями: id, art (артикул), product_name (название товара), price (цена);

2. prices с полями: art (артикул), price (цена).

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

UPDATE products SET
  products.price = (SELECT prices.price FROM prices WHERE products.art = prices.art)

Здесь, "UPDATE products SET" указывает, что выполняется обновление таблицы products. Следующая строка содержит присвоение полю значения, выбранного вторым запросом на выборку. Выборка соответствующего значения осуществляется условием равенства поля art (артикул).

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

Другие материалы:

ID последней записи в базе данных запросом SQL


Удаление повторяющихся строк в таблице запросом SQL


Условия отбора в запросе SQL (WHERE)


Написать комментарий

Комментарии

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


коммент.

avatar

Тамик

- 19 апреля 2023, 11:08 ↓
а если нужно условие выполнить как: UPDATE calls SET
calls.commentariy = (SELECT city_code.code FROM city_code WHERE calls.direction LIKE city_code."%495%").
Т.е. добавить в таблицу звонков, поле с комментарием, куда впишутся все звонки на Москву. Коды Городов находятся в другой таблице (city_code).
avatar

Антон Сенников

- 23 августа 2022, 10:35 ↓
Добрый день, useless.
Вы верно заметили, это опечатка. Исправил ее. Спасибо за ваше замечание.
avatar

useless

- 23 августа 2022, 10:16 ↓
WHERE products.atr = prices.atr)

ошибка или так надо?
atr или art?
avatar

Дуб

- 22 января 2021, 17:48 ↓
Занятно

Разработка сайтов

Корпоративный сайт
Интернет-магазин
Лендинг - одностраничный сайт
Сайт-визитка
Сайт-портфолио

Проектирование

Прототип, UX-дизайн

Дизайн

UI-дизайн
Логотип

+54 911 2801-4950

info@space-base.net
+7 928 008-80-89

Web-сайты для успешного бизнеса

Web-сайты для успешного бизнеса

Главная Услуги Портфолио События Библиотека Контакты
+7 928 008-80-89 Меню
Политика в отношении обработки персональных данных © Copyright 2014 - | Space-Base

Лучшее время начать свой проект - Сейчас!

Выбраны опции:

Отправить сообщение на:

Telegram WhatsApp

Отправляя сообщение, вы даете свое согласие на
обработку песональных данных