2016-02-13 143 views
0

Tables Involved我期待基于另一个表的列的值的条件修改一个表上的列的值。更新值基于另一个表中的值

我使用的代码:

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

这应该是很简单的,我要去哪里错了?

+1

你可以运行这个没有得到任何错误?除此之外,看起来您缺少订单明细和客户之间的连接。您是否在订单明细表中有任何客户Id列? –

回答

0

您没有明确指定第二个TABLE。加入应该工作。记住,总是表示别名,而不是表名旁边的UPDATE

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同 JOIN CUSTOMER C_T ON O_T.SOME_COLUMN_NAME = C_T.SOME_COLUMN_NAME WHERE C_T.FIRSTNAME ='简和C_T.LASTNAME = 'DOE' 错误在命令行:3列:1个 错误报告 - SQL错误:ORA-00933:SQL命令不能正确地结束 00933. 00000 - “SQL命令不能正确地结束” *原因: *操作: –

+0

ON O_T.SOME_COLUMN_NAME = C_T.SOME_COLUMN_NAME 您必须更改“SOME _COLUMN_NAME“分配到您表格中的相应列。我给了SOME_COLUMN_NAME,因为我看不到你的表格结构。 – Chendur

+0

是的,我做了正确的代码: UPDATE O_t同 SET PRODUCTID = 'BASE1' FROM的OrderDetail O_t同 INNER JOIN客户C_T ON O_T.PRODUCTID = C_T.CUSTOMERID WHERE C_T.FIRSTNAME ='简和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' 
); 

甲骨文doesn't allow you有一个更新语句直接加入。如果您从另一张表中获得新值,那么您应该使用something like this

相关问题