Недавно мне пришлось вставить новый столбец в одну из моих таблиц, где у меня уже есть сотни записей. Я хочу заполнить этот новый столбец, используя 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 |
+---------------+-----------+------------+---------------------+