如果两列在另一个表中匹配,如何更新一个表中的单个列?

时间:2018-05-08 06:55:50

标签: sql oracle select sql-update

我是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);

4 个答案:

答案 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

如果有任何错误......请回复我