【问题标题】:Deleting multiple tables using join not deleting for all tables使用连接删除多个表而不是删除所有表
【发布时间】:2021-05-26 13:10:28
【问题描述】:

我正在使用连接从多个表中删除,但此查询的问题是,如果一个表不包含匹配值/为空,则不会对具有匹配值和数据的表执行删除。 我该如何解决这个问题?

CREATE DEFINER=`root`@`localhost` PROCEDURE `gdpr_delete`(_email_ varchar(128))
BEGIN
   DELETE AppCoverLetter, AppError, AppFormData, AppJobData, AppTrackingData, FlowLog, App,AppResume
   FROM AppCoverLetter t1
   INNER JOIN (
     SELECT AppId 
     FROM ApplyData.AppFormData 
     where lower(Email) = lower(_email_)
   ) t3 ON t1.AppID = t3.AppId
   INNER JOIN AppError        ON AppError.AppID = t3.AppId
   INNER JOIN AppCoverLetter  ON AppCoverLetter.AppID = t3.AppId
   INNER JOIN AppFormData     ON AppFormData.AppID = t3.AppId
   INNER JOIN AppJobData      ON AppJobData.AppID = t3.AppId
   INNER JOIN AppTrackingData ON AppTrackingData.AppID = t3.AppId
   INNER JOIN FlowLog         ON FlowLog.AppID = t3.AppId
   INNER JOIN App             ON App.AppID = t3.AppId
   INNER JOIN AppResume       ON AppResume.AppID = t3.AppId;
END

【问题讨论】:

标签: mysql stored-procedures


【解决方案1】:

如果你不是总是匹配行,你可以使用单独的删除和单连接来避免循环

   DELETE  tx
   FROM table3 tx
   INNER JOIN (
     SELECT AppId 
     FROM ApplyData.AppFormData 
     where lower(Email) = lower(_email_)
   ) t3 ON tx.AppID = t3.AppId

但是您是否有一些具有可靠持久关系的表,然后对于这些表,您可以使用单个查询进行多次删除,并将单个连接删除仅保留给可选关系

【讨论】:

    猜你喜欢
    • 2015-02-23
    • 2010-11-27
    • 1970-01-01
    • 1970-01-01
    • 2016-07-09
    • 1970-01-01
    • 2015-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多