使用多列的Oracle更新语句

时间:2014-12-18 22:35:49

标签: sql oracle sql-update

我正在尝试更新我的产品的价格,使用另一张表,其中包含产品材料和该材料的数量

我的表是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

感谢

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

如果这不是您的目标,请告诉我