2

特に、AssociateIDフィールドとDocumentNameフィールドを格納するデータベーステーブルを使用しています。このテーブルは、どのアソシエートがどのドキュメントを失っているのかを記録するために使用されます。

同じアソシエートの「TerminationStatement」のエントリが見つからない場合に「RestrictiveCovenantLetters」の行を削除するストアドプロシージャを作成しようとしています。以下は私がこれまでに持っているものの本体です:

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は本当に私の得意ではありません。誰か助けてくれる人がいたら、本当にありがたいです!

4

1 に答える 1

2

MySQLマニュアルによると:

現在、テーブルから削除し、サブクエリで同じテーブルから選択することはできません。

これを回避するには、一時テーブルを使用して、関連する行を一時テーブルに挿入し、削除ステートメントでそれを参照します。

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
        )

SQL Fiddle の例

于 2012-11-12T17:25:57.467 に答える