Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用多列的Oracle update语句_Sql_Oracle_Sql Update - Fatal编程技术网

Sql 使用多列的Oracle update语句

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 我有两个选择返回相同的

我试图更新我的产品价格,使用另一个表,其中有产品材料和该材料的编号

我的表格是produkt(
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吗?