2016-02-13 7 views
0

Tables Involved Я ищу, чтобы изменить значение столбца в одной таблице на основе условия значения столбца другой таблицы.Обновление значения на основе значения в другой таблице

Я использую код:

UPDATE ORDERDETAIL 
SET ORDERDETAIL.PRODUCTID = 'BASE1' 
WHERE CUSTOMER.FIRSTNAME = 'JANE' AND CUSTOMER.LASTNAME = 'DOE'; 

Это должно быть очень просто, где я буду неправильно?

+1

Вы можете запустить это без каких-либо ошибок? Кроме того, похоже, что вам не хватает соединения между деталями заказа и клиентом. У вас есть столбец идентификатора клиента в таблице сведений о заказах? –

ответ

0

Вы не указали вторую ТАБЛИЦУ явно. Присоединиться должно работать. Не забывайте всегда обозначают псевдоним, а не имя таблицы прямо рядом с ОБНОВЛЕНИЕ

UPDATE O_T 
SET PRODUCTID = 'BASE1' 
from ORDERDETAIL O_T 
JOIN CUSTOMER C_T 
ON O_T.SOME_COLUMN_NAME=C_T.SOME_COLUMN_NAME 
WHERE C_T.FIRSTNAME = 'JANE' AND C_T.LASTNAME = 'DOE'; 
+0

Еще ошибки: начиная Ошибка в строке: 1 в команде - UPDATE O_T SET PRODUCTID = 'BASE1' из OrderDetail O_T РЕГИСТРИРУЙТЕСЬ C_T КЛИЕНТА ON O_T.SOME_COLUMN_NAME = C_T.SOME_COLUMN_NAME WHERE C_T.FIRSTNAME = 'JANE' И C_T.LASTNAME = 'МЭ' ошибки в командной строке: 3 Колонка: 1 ошибки отчета - Ошибка SQL: ORA-00933: команда SQL не правильно закончилась 00933. 00000 - "команда SQL не правильно закончилась" * Причины : * Действие: –

+0

ON O_T.SOME_COLUMN_NAME = C_T.SOME_COLUMN_NAME Вам нужно изменить «НЕКОТОРЫЕ _COLUMN_NAME "в соответствующий столбец в вашей таблице. Я дал SOME_COLUMN_NAME, потому что я не вижу вашу структуру таблицы. – Chendur

+0

Да, я сделал правильно, что код: UPDATE O_T SET ProductID = 'BASE1' ИЗ OrderDetail O_T INNER JOIN КЛИЕНТ C_T ON O_T.PRODUCTID = C_T.CUSTOMERID WHERE C_T.FIRSTNAME = 'JANE' И C_T. LASTNAME = 'DOE'; Но это все еще не удается. Я что-то пропустил? Прости. –

0

Если вы всегда использовать фиксированное значение, для Вас использование exists для поиска записей, которые соответствуют условию в других таблицах:

UPDATE ORDERDETAIL OD 
SET OD.PRODUCTID = 'BASE1' 
WHERE EXISTS (
    SELECT NULL 
    FROM CUSTOMER C 
    JOIN ORDERS O ON O.CUSTOMERID = C.CUSTOMERID 
    WHERE C.FIRSTNAME = 'JANE' 
    AND C.LASTNAME = 'DOE' 
    AND O.ORDERID = OD.ORDERID 
); 

Или подзапрос:

UPDATE ORDERDETAIL OD 
SET OD.PRODUCTID = 'BASE1' 
WHERE OD.ORDERID IN (
    SELECT O.ORDERID 
    FROM CUSTOMER C 
    JOIN ORDERS O ON O.CUSTOMERID = C.CUSTOMERID 
    WHERE C.FIRSTNAME = 'JANE' 
    AND C.LASTNAME = 'DOE' 
); 

Oracle doesn't allow you иметь присоединиться непосредственно в отчете обновления. Если бы вы получили новое значение из другой таблицы, вы бы something like this.

Смежные вопросы