I am having trouble getting the following query to work...
/*SET APPROPRIATE DATABASE CONTEXT*/
USE IDMAS_VESSELS;
/*BEGIN UPDATE SCRIPT*/
UPDATE INSPECTION i SET i.WALL_LOSS =
CASE WHEN i.STATUS IN('A','R')
THEN CASE WHEN i.INSPECTION_NO = (
SELECT INSPECTION_NO
FROM (SELECT * FROM INSPECTION) AS insp
/*CAN REFER TO TABLE IN UPDATE CLAUSE*/
WHERE EQUIPMENT_ID = i.EQUIPMENT_ID AND CML_ID = i.CML_ID
ORDER BY INSPECTION_DATE ASC, INSPECTION_NO
LIMIT 1
)
THEN i.NOMINAL_WALL_THICKNESS - i.MINIMUM_REMAINING_WALL_THICKNESS
ELSE (
SELECT MINIMUM_REMAINING_WALL_THICKNESS
FROM (
SELECT @rank:=@rank+1 AS DATE_POSITION, INSP.*
FROM (SELECT * FROM INSPECTION) AS insp
/*CODE FAILS AT THIS LINE*/
/*CAN NOT REFER TO TABLE IN UPDATE CLAUSE*/
WHERE insp.EQUIPMENT_ID = i.EQUIPMENT_ID AND insp.CML_ID = i.CML_ID
) as DATA_WITH_DATE_POSITIONS
WHERE DATE_POSITION = 1
) - i.MINIMUM_REMAINING_WALL_THICKNESS
END
ELSE NULL
END
WHERE i.EQUIPMENT_ID = '%';
Upon running I get the following error:
Error Code: 1054. Unknown column 'i.EQUIPMENT_ID' in 'where clause'
I have concluded that MySQL will not let you refer to the table in the UPDATE Clause when it is embedded within multiple sub queries. However, you can refer to it when embedded in only one sub query (as identified in the notes within the code above).
So my question is how do I refer to the table in the UPDATE clause when it is embedded in multiple sub queries?