Вставьте данные в таблицу, выбрав из 2 других таблиц - PullRequest
0 голосов
/ 26 января 2020

Недавно мне пришлось вставить новый столбец в одну из моих таблиц, где у меня уже есть сотни записей. Я хочу заполнить этот новый столбец, используя INSERT INTO SELECT запрос из других таблиц. Таблицы описаны ниже.

salesman_products таблица, где у нас есть уникальный salesman_products_id для каждого товара продавца, и это значение должно быть вставлено во вновь вставленный столбец в таблице inward_log

CREATE TABLE `salesman_products` (
  `salesman_products_id` int(10) NOT NULL PRIMARY KEY,
  `salesman_id` int(10) NOT NULL
  `product_id` int(10) NOT NULL
) ;

INSERT INTO `salesman_products` (`salesman_products_id`, `salesman_id`, `product_id`) VALUES
(1, 1, 1),
(2, 1, 2),
(3, 2, 1),
(4, 1, 3),
(5, 2, 2);

Вторая таблица - это inward таблица, где у нас есть salesman_id, которая должна использоваться в запросе для выбора данных из salesman_products table

CREATE TABLE `inward` (
  `inward_id` int(10) NOT NULL PRIMARY KEY,
  `salesman_id` int(10) NOT NULL
) ;

INSERT INTO `inward` (`inward_id`, `salesman_id`) VALUES
(1, 1),
(2, 1),
(3, 2),
(4, 1),
(5, 2);

Третья таблица, где Я хочу заполнить столбец salesman_product_id, здесь у нас есть первичный ключ таблицы inward в качестве внешнего ключа, а также у нас есть product_id, который будет использоваться вместе с salesman_id из внутренней таблицы для выбора salesman_product_id из таблицы salesman_products

CREATE TABLE `inward_log` (
  `inward_log_id` int(10) NOT NULL PRIMARY KEY,
  `inward_id` int(10) NOT NULL,
  `product_id` int(10) NOT NULL,
  `salesman_product_id` int(10) NOT NULL DEFAULT 0
) ;

INSERT INTO `inward_log` (`inward_log_id`, `inward_id`, `product_id`, `salesman_product_id`) VALUES
(1, 1, 1, 0),
(2, 1, 1, 0),
(3, 1, 2, 0),
(4, 2, 2, 0),
(5, 2, 1, 0),
(6, 3, 1, 0),
(7, 5, 2, 0);

Я хочу заполнить столбец salesman_product_id в таблице inward_log на salesman_product_id из salesman_products таблицы

Мой запрос такой, как ниже , который не дает ожидаемого результата.

INSERT INTO inward_log (salesman_product_id)

SELECT salesman_product_id FROM salesman_products
WHERE salesman_id = 
    (SELECT salesman_id FROM inward_log GROUP BY inward_log_id)
AND product_id = 
    (SELECT product_id FROM inward GROUP BY inward_log_id )

order by inward_log_id

ОЖИДАЕМЫЙ РЕЗУЛЬТАТ в столбце salesman_product_id должен быть таким же, как показано ниже

+---------------+-----------+------------+---------------------+
| inward_log_id | inward_id | product_id | salesman_product_id |
+---------------+-----------+------------+---------------------+
|       1       |     1     |      1     |          1          |
|       2       |     1     |      1     |          1          |
|       3       |     1     |      2     |          2          |
|       4       |     2     |      2     |          2          |
|       5       |     2     |      1     |          1          |
|       6       |     3     |      1     |          3          |
|       7       |     5     |      2     |          5          |
+---------------+-----------+------------+---------------------+
...