Sql 使用多列的Oracle update语句
我试图更新我的产品价格,使用另一个表,其中有产品材料和该材料的编号 我的表格是produkt(Sql 使用多列的Oracle update语句,sql,oracle,sql-update,Sql,Oracle,Sql Update,我试图更新我的产品价格,使用另一个表,其中有产品材料和该材料的编号 我的表格是produkt(PRODUKTIDint,NAZOVvarchar(47),VYROBNA\u CENAint) 表格材料(MATERIALIDint,CENAnumeric); 表zlozenie(PRODUKTKIDint,MATERIALIDint,MNOZSTVOint) 我想做的是把sum(ZLOZENIE.MNOZSTVO*MATERIAL.CENA)放到VYROBNA\u CENA 我有两个选择返回相同的
PRODUKTID
int,NAZOV
varchar(47),VYROBNA\u CENA
int)
表格材料(MATERIALID
int,CENA
numeric);
表zlozenie(PRODUKTKID
int,MATERIALID
int,MNOZSTVO
int)
我想做的是把sum(ZLOZENIE.MNOZSTVO*MATERIAL.CENA)放到VYROBNA\u CENA
我有两个选择返回相同的列,但我不确定如何使用update将值从一个传递到另一个
第一个-产品的计算价格
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
第二个是带有空价格的表produkt(cena),我想把sum的结果放到cena列
select PRODUKT.NAZOV, PRODUKT.vyrobna_cena
from PRODUKT
order by PRODUKT.NAZOV
sql处理表和查询
谢谢以下工作基于您的sql fiddle和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));
SQLFIDLE与更新的表和查询:
查询以更新produckt表
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
如果这不是你想要的,请告诉我
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
您的意思是像@benji这样,请注意本文是oracle,您的链接是sql server。基于平台,可能有一种更具体的方法来处理此问题。此外,您的链接没有显示如何处理聚合。@paqogomez,但这不是同一个概念吗
updatetable set column=subquery
?@benji-相同的概念,但Oracle不支持更新中的内部联接语法(尽管如果支持的话会非常整洁)。谢谢,我收到了ORA-00971:缺少集合关键字错误。我将尝试找出问题所在..MySQL语法与Oracle语法不同。所以这个解决方案行不通,唉。塞夫达,你不是在使用MySQL吗?