If you are always using a fixed value, you an use exists
to find records which match the condition in the other tables:
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
);
Or a subquery:
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 to have a join directly in the update statement. If you were getting the new value from the other table as well you would something like this.