Как обновить один столбец в одной таблице, если два столбца совпадают в другой таблице? - PullRequest
0 голосов
/ 08 мая 2018

Каждый я начинающий в SQL.

У меня есть две таблицы, такие как первая, вторая.

pid столбец первой таблицы и pid столбец второй таблицы совпадают. Я должен получить price из первой таблицы и quantity из второй таблицы, умножить эти значения (окончательные) и обновить эти окончательные значения во второй таблице в столбце price.

Я пытался, но это не работает. Может кто-нибудь мне помочь? Заранее спасибо.

ПЕРВЫЙ СТОЛ

Name   Null?    Type         
------ -------- ------------ 
PID    NOT NULL NUMBER(38)   
PNAME  NOT NULL VARCHAR2(20) 
PPRICE NOT NULL FLOAT(126)   
PAVAIL NOT NULL NUMBER(38)  

ВТОРОЙ СТОЛ

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 голосов
/ 08 мая 2018

Проверьте это утверждение:

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 );
0 голосов
/ 08 мая 2018

Вы можете попробовать это также ..

обновление с set s.price = s.qty * f.pprice со второго, первого где s.pid = f.pid

если возникнет ошибка ... верните меня обратно

0 голосов
/ 08 мая 2018

Обновление с использованием объединения выполняется с помощью оператора MERGE в Oracle, и это то, что вам нужно. В вашем случае:

MERGE INTO second a
     USING FIRST b
        ON (a.pid = b.pid)
WHEN MATCHED
THEN
   UPDATE SET a.price = b.price * a.qty;
0 голосов
/ 08 мая 2018

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)

Существующее предложение необходимо для того, чтобы убедиться, что запись в second, которая не соответствует чему-либо в first, не обновляет цену до NULL. Если этого не произойдет, или вам все равно, если это произойдет, вы можете также удалить предложение WHERE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...