更新值基于另一个表中的值
我期待基于另一个表的列的值的条件修改一个表上的列的值。更新值基于另一个表中的值
我使用的代码:
UPDATE ORDERDETAIL
SET ORDERDETAIL.PRODUCTID = 'BASE1'
WHERE CUSTOMER.FIRSTNAME = 'JANE' AND CUSTOMER.LASTNAME = 'DOE';
这应该是很简单的,我要去哪里错了?
您没有明确指定第二个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';
仍然错误: 错误起始于线: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命令不能正确地结束” *原因: *操作: –
ON O_T.SOME_COLUMN_NAME = C_T.SOME_COLUMN_NAME 您必须更改“SOME _COLUMN_NAME“分配到您表格中的相应列。我给了SOME_COLUMN_NAME,因为我看不到你的表格结构。 – Chendur
是的,我做了正确的代码: 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'; 但它仍然失败。我在某处错过了你的观点吗?对不起。 –
如果你总是使用固定的值,你的使用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。
你可以运行这个没有得到任何错误?除此之外,看起来您缺少订单明细和客户之间的连接。您是否在订单明细表中有任何客户Id列? –