我正在尝试更新我的产品的价格,使用另一张表,其中包含产品材料和该材料的数量
我的表是produkt(PRODUKTID
int,NAZOV
varchar(47),VYROBNA_CENA
int)
表格材料(MATERIALID
int,CENA
数字);
表zlozenie(PRODUKTKID
int,MATERIALID
int,MNOZSTVO
int);
我要做的是将总和(ZLOZENIE.MNOZSTVO * MATERIAL.CENA)放到列VYROBNA_CENA
我有两个选择返回相同的列,但我不知道如何使用更新将值从一个传输到另一个
第一个 - 计算产品价格
select PRODUKT.NAZOV as NAZOV, sum(ZLOZENIE.MNOZSTVO*MATERIAL.CENA) as celkova
from MATERIAL, PRODUKT, ZLOZENIE
where ZLOZENIE.MATERIALID=MATERIAL.MATERIALID
and PRODUKT.PRODUKTID=ZLOZENIE.PRODUKTKID
group by PRODUKT.NAZOV
order by PRODUKT.NAZOV
第二个是具有空价(cena)的表产品,我想将总和的结果放入列cena
select PRODUKT.NAZOV, PRODUKT.vyrobna_cena
from PRODUKT
order by PRODUKT.NAZOV
sql表格和查询http://sqlfiddle.com/#!2/e183f/2
感谢
答案 0 :(得分:2)
MERGE INTO produkt p
USING
(
SELECT ZLOZENIE.PRODUKTKID, SUM(ZLOZENIE.MNOZSTVO*MATERIAL.CENA) AS celkova
FROM MATERIAL, ZLOZENIE
WHERE ZLOZENIE.MATERIALID=MATERIAL.MATERIALID
GROUP BY ZLOZENIE.PRODUKTKID
) s
ON (p.PRODUKTID = s.PRODUKTKID)
WHEN MATCHED THEN
UPDATE SET VYROBNA_CENA = s.celkova;
虽然我总是使用连接语法
MERGE INTO produkt p
USING
(
SELECT ZLOZENIE.PRODUKTKID, SUM(ZLOZENIE.MNOZSTVO*MATERIAL.CENA) as celkova
FROM MATERIAL
JOIN ZLOZENIE ON ZLOZENIE.MATERIALID=MATERIAL.MATERIALID
GROUP BY ZLOZENIE.PRODUKTKID
) s
ON (p.PRODUKTID = s.PRODUKTKID)
WHEN MATCHED THEN
UPDATE SET VYROBNA_CENA = s.celkova
答案 1 :(得分:-1)
以下工作基于您的sql小提琴和mysql数据库。
将创建脚本中的所有十进制列从整数更改为十进制。以下是更新的创建脚本
CREATE TABLE produkt
(`PRODUKTID` int, `NAZOV` varchar(47), `VYROBNA_CENA` decimal(10,2));
CREATE TABLE zlozenie
(`PRODUKTKID` int, `MATERIALID` int, `MNOZSTVO` decimal(10,5));
CREATE TABLE material
(`MATERIALID` int, `CENA` decimal(10,2));
sqlfiddle,包含更新的表格和查询:http://sqlfiddle.com/#!2/0242f/6
查询以更新产品表
update produkt INNER JOIN
(select ZLOZENIE.PRODUKTKID,sum(ZLOZENIE.MNOZSTVO*MATERIAL.CENA) as celkova
from MATERIAL, ZLOZENIE
where ZLOZENIE.MATERIALID=MATERIAL.MATERIALID
group by ZLOZENIE.PRODUKTKID) ZM
on produkt.PRODUKTKID = ZM.PRODUKTKID
set produkt.VYROBNA_CENA = ZM.celkova
如果这不是您的目标,请告诉我