基于另外两个表删除一行

问题描述 投票:0回答:1

我正在尝试按以下方式删除行:

DELETE MemberDetails
WHERE Exists (
    SELECT m.MemberID
    FROM MemberDetails m
    INNER JOIN PaymentDetails pd ON
    pd.MemberID = m.MemberID
    INNER JOIN GDPRCompliance gd ON
    gd.MemberID = m.MemberID
    WHERE MActive= 'N' AND OptionB= 'N' and DATEDIFF(dd,ExpiryDate, GETDATE())>=30
);

我只想删除MemberDetails中的详细信息,其中满足以下三个条件:

  1. 成员不活跃
  2. 选项B为N,并且
  3. 到期日期已逾30天。

当我使用上面的代码时,系统将删除MemberDetails表中的所有内容。

我不知道为什么会这样。

有什么想法吗?

sql-server sql-delete delete-row cascading-deletes
1个回答
0
投票

Exists用于子查询为true或false。由于子查询返回true,因此将删除表上的所有记录。尝试如下所示,而不要使用Exists。

DELETE MemberDetails a
WHERE a.MemberID in (
    SELECT m.MemberID
    FROM MemberDetails m
    INNER JOIN PaymentDetails pd ON
    pd.MemberID = m.MemberID
    INNER JOIN GDPRCompliance gd ON
    gd.MemberID = m.MemberID
    WHERE MActive= 'N' AND OptionB= 'N' and DATEDIFF(dd,ExpiryDate, GETDATE())>=30
);
© www.soinside.com 2019 - 2024. All rights reserved.