更新另一个关联表的多条数据(Oracle)

场景1:当删除表PC_ATTENDANCE_MODE B中的一条数据时(传过来的是数据的Id),同时更新表PC_PRODUCTION_CALENDAR D中多条已经引用表PC_ATTENDANCE_MODE B删除数据的多条数据(置为空):

UPDATE PC_PRODUCTION_CALENDAR D
SET D.MODE_ID = null
WHERE D.ID = ( SELECT E.id
               FROM  ( select A.ID
                       from PC_PRODUCTION_CALENDAR A
                       where A.MODE_ID = (SELECT B.MODE_ID
                                           FROM PC_ATTENDANCE_MODE B
                                           WHERE B.ID = #{id} )) E
               WHERE E.id = D.id )

类似:
场景2:表JM_EQUIPMENT_INFO中包括所有的设备信息,表PC_EQUIP_RESOURCE是被#{calendarId}使用的设备,需要找出还未被#{calendarId}使用的所有设备的信息(查询结果的minus运算):

SELECT *
FROM  JM_EQUIPMENT_INFO D

MINUS

SELECT *
FROM  JM_EQUIPMENT_INFO D
where D.EQUI_ID =( SELECT E.EQUI_ID
                   FROM  ( SELECT EQUI_ID
                           FROM  JM_EQUIPMENT_INFO A LEFT JOIN PC_EQUIP_RESOURCE B ON A.EQUI_ID = B.EQUIP_ID
                           WHERE  B.CALENDAR_ID = #{calendarId} ) E
                   WHERE E.EQUI_ID = D.EQUI_ID )

MINUS运算(属于a不属于b的结果):

SELECT a_id FROM a
MINUS
SELECT b_id FROM b;
`

同样,UNION(去重)、UNION ALL(不去重) 运算;
intersect运算,求结果交集。

自己在实践中碰到的问题,记录一下。使用代码实现的,没有用触发器。如果路过的大神有更简单语法,请不吝赐教。

你可能感兴趣的:(sql,更新多条数据中的字段)