Вставьте значения, ссылающиеся на другую таблицу - PullRequest
0 голосов
/ 22 января 2019

Я создал следующие простые datamodel:

enter image description here

Я использовал следующие insert statements для вставки значений:

1) Таблица Продукты :

INSERT INTO test.products
(ProductName, Price)
VALUES 
("Product A","99,99"),
("Product B","49,95"), 
("Product C","5,95");

2) Таблица Заказы :

INSERT INTO test.orders
(Customer)
VALUES 
("Customer A"),
("Customer B"), 
("Customer B");

Пока все это прекрасно работает.


Однако теперь я также хочу вставить значения в таблицу Products_per_Order.
Как видно из таблицы datamodel, таблица Products_per_Order содержит столбец Price.В этом столбце я хочу вставить цену, ссылаясь на ID в столбце Products_idProducts.Поэтому я попытался указать следующее insert statement, но пока не смог заставить его работать:

INSERT INTO test.products_per_order
(Orders_idOrders, Products_idProducts, Price, Quantity)
VALUES
("1","1",(Select Price from test.products),"5"),
("1","2",(Select Price from test.products),"4"),
("2","1",(Select Price from test.products),"10"),
("3","2",(Select Price from test.products),"3"),
("3","3",(Select Price from test.products),"9");

У вас есть идеи, как решить эту проблему?

Ответы [ 3 ]

0 голосов
/ 22 января 2019

Вы близки, но вы, когда у вас есть (Select Price from test.products), выбирает все цены из таблицы test.products.Вам нужно сделать так, чтобы он возвращал одно значение.

INSERT INTO test.products_per_order
(Orders_idOrders, Products_idProducts, Price, Quantity)
VALUES
("1","1",(Select Price from test.products WHERE test.products.idProducts = '1'),"5"),
("1","2",(Select Price from test.products WHERE test.products.idProducts = '2'),"4"),
("2","1",(Select Price from test.products WHERE test.products.idProducts = '1'),"10"),
("3","2",(Select Price from test.products WHERE test.products.idProducts = '2'),"3"),
("3","3",(Select Price from test.products WHERE test.products.idProducts = '3'),"9");
0 голосов
/ 22 января 2019

Я бы рекомендовал использовать insert . . . select вместо:

insert into test.products_per_order (Orders_idOrders, Products_idProducts, Price, Quantity)
    select x.idOrder, x.idProduct, p.price, x.qty
    from (select 1 as idOrder, 2 as idProduct, 5 as qty union all
          select 1 as idOrder, 2 as idProduct, 4 as qty union all
          . . .  -- I've left these out so you can see the structure of the query
          select 3 as idOrder, 3 as idProduct, 9 as qty
         ) x left join
         test.products p
         on p.idProducts = x.idProduct;

Это значительно снижает вероятность того, что опечатка приведет к неправильной цене.

0 голосов
/ 22 января 2019

Вы можете использовать подзапрос, чтобы извлечь его из таблицы «Продукты».

("2","1","Select Price from test.products where test.products.idProducts = '1')","10");
...