mysql - 比较并删除特定表中的行

标签 mysql sql stored-procedures

我正在使用一个数据库表,其中存储了 AssociateID 字段和 DocumentName 字段等内容。该表用于记录哪些员工缺少哪些文档。

我正在尝试编写一个存储过程,如果找不到同一员工的“终止声明”条目,该存储过程将删除“限制性契约信件”行。以下是我迄今为止所掌握的内容的正文:

DELETE from tbl_HR_Auditing_Reports
WHERE DocumentName = 'Restrictive Covenant Letters'
AND NOT EXISTS
    (
        SELECT TS.AssociateID
        FROM
            (SELECT AssociateID FROM tbl_HR_Auditing_Reports WHERE DocumentName = 'Termination Statement (*)') TS,
            (SELECT AssociateID FROM tbl_HR_Auditing_Reports WHERE DocumentName = 'Restrictive Covenant Letters') RCL
        WHERE  TS.AssociateID = RCL.AssociateID
    )

我想我已经很接近了,但 sql 并不是我的强项。如果有人可以提供帮助,我将非常感激!

最佳答案

根据MySQL manual :

目前,您无法在子查询中从表中删除并从同一个表中进行选择。

要解决这个问题,您可以使用临时表,将相关行插入到临时表中,然后在删除语句中引用它。

CREATE TEMPORARY TABLE tmp (AssociateID INT);
INSERT INTO tmp (AssociateID)
SELECT  AssociateID
FROM    tbl_HR_Auditing_Reports
WHERE   DocumentName = 'Termination Statement (*)';

DELETE 
FROM    tbl_HR_Auditing_Reports 
WHERE   DocumentName = 'Restrictive Covenant Letters'
AND     NOT EXISTS
        (   SELECT  1
            FROM    tmp
            WHERE   tmp.AssociateID = tbl_HR_Auditing_Reports.AssociateID
        )

<强> Example on SQL Fiddle

关于mysql - 比较并删除特定表中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13348316/

相关文章:

php - 从 BLOB 确定图像的 MIME 类型?

sql - 如何将变量传递给 View 中的子选择

mysql - 无法使用 ActiveRecord 从 Rake 任务执行 MySQL sql "source"命令

javascript - 如何在使用多个集合的 DocumentDB 中使用存储过程

mysql - 将查询转换为 'where in clause' 的 mysql 存储过程

mysql - 运行 mysqld 时出现问题

java - 加载数据查询不适用于 INSERT/REPLACE 选项

mysql - rails : displaying an image from a blob field in a database

c# - 尝试使用 SQL 将数据插入数据库时​​出现 "Invalid column name"

Mysql查询查找具有相同列值的字段总和