I have a table.
CREATE TABLE StockItem
(
id NUMBER(8) NOT NULL,
book_id NUMBER(8) NOT NULL,
wh_id NUMBER(8) NOT NULL,
quantity NUMBER(4) NOT NULL,
price NUMBER(8,2) NOT NULL
);
ALTER TABLE StockItem
ADD CONSTRAINT UQ_StockItem UNIQUE (book_id, wh_id);
ALTER TABLE StockItem ADD CONSTRAINT PK_StockItem
PRIMARY KEY (id);
ALTER TABLE StockItem ADD CONSTRAINT FK_StockItem_Book
FOREIGN KEY (book_id) REFERENCES Book (id);
ALTER TABLE StockItem ADD CONSTRAINT FK_StockItem_Warehouse
FOREIGN KEY (wh_id) REFERENCES Warehouse (id);
Now suppose wh_id = 1
is closed and I should move all the books to wh_id = 2
. Book prices for wh_id = 2
should be the same as they were in wh_id = 1
and quantity
should be calculated properly (e.g. increased for the same book_id
for two werehouses). How can I do that?
UPD:
Here is how I can get new quantity values for the books.
SELECT BOOK_ID, SUM(QUANTITY)
FROM STOCKITEM
WHERE WH_ID IN (1, 2)
GROUP BY BOOK_ID;
Now I should update them somehow.
UPDATE STOCKITEM
SET QUANTITY = /* My summed quantity */
WHERE BOOK_ID = /* Book ids from 1 and 2 wh */