我期待基於另一個表的列的值的條件修改一個表上的列的值。更新值基於另一個表中的值
我使用的代碼:
UPDATE ORDERDETAIL
SET ORDERDETAIL.PRODUCTID = 'BASE1'
WHERE CUSTOMER.FIRSTNAME = 'JANE' AND CUSTOMER.LASTNAME = 'DOE';
這應該是很簡單的,我要去哪裏錯了?
我期待基於另一個表的列的值的條件修改一個表上的列的值。更新值基於另一個表中的值
我使用的代碼:
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列? –