我是SQL的初学者。
我有两张桌子,比如第一张,第二张。
第一个表的 pid
列和第二个表的pid
列是相同的。我必须从第一个表中获取price
并从第二个表中获取quantity
,将这些值(最终)相乘并在price
列的第二个表中更新最终值。
我试过但它没有用。谁能帮我?提前谢谢。
FIRST TABLE
Name Null? Type
------ -------- ------------
PID NOT NULL NUMBER(38)
PNAME NOT NULL VARCHAR2(20)
PPRICE NOT NULL FLOAT(126)
PAVAIL NOT NULL NUMBER(38)
SECOND TABLE
Name Null? Type
------------ -------- ------------
ORDERID NOT NULL NUMBER(38)
PID NUMBER(38)
CUSTOMERNAME NOT NULL VARCHAR2(20)
PHNO NOT NULL NUMBER(38)
QTY NOT NULL NUMBER(38)
PRICE NOT NULL FLOAT(126)
我使用了这个查询,但它不起作用:
update first f, second s
SET s.price = f.pprice * s.qty
where s.pid EXISTS (select second.pid from first, second
where (first.pid=second.pid);
答案 0 :(得分:1)
Oracle不支持更新连接语法。一种解决方法是使用带有相关子查询的更新。
UPDATE second s
SET s.price = s.qty * (SELECT f.pprice FROM first f WHERE f.pid = s.pid)
WHERE EXISTS (SELECT 1 FROM first f WHERE f.pid = s.pid)
必须使用exists子句确保second
中与first
中的任何内容不匹配的记录的价格未更新为NULL
。如果这种情况不可能发生,或者你不在乎它,那么你也可以删除WHERE
条款。
答案 1 :(得分:0)
使用连接更新是使用Oracle中的MERGE语句完成的,这就是您所需要的。在你的情况下:
MERGE INTO second a
USING FIRST b
ON (a.pid = b.pid)
WHEN MATCHED
THEN
UPDATE SET a.price = b.price * a.qty;
答案 2 :(得分:0)
检查此声明:
update second s
set s.price = s.qty * (select f.pprice from first f where f.pid = s.pid )
where exists (select f.pprice from first f where f.pid = s.pid );
答案 3 :(得分:-1)
你也可以尝试这个..
更新 set s.price = s.qty * f.pprice 从第二个s,第一个f 其中s.pid = f.pid
如果有任何错误......请回复我