如果满足条件,则删除记录的所有实例

时间:2016-09-20 20:41:34

标签: sql ms-access

如果flag字段中的值为4,我会尝试删除记录的所有实例。 (这意味着他们已从电子邮件列表中取消订阅)

示例数据:

Customer#       Email          Name   CustomerType   Flag
   001      email@email.com    Bob       Vet          1
   001      email@email.com    Bob       Med          2
   001      email@email.com    Bob       Pod          4

因为有一个实例,此记录的Flag4,所以应该从此查询中删除所有3个。它们不需要实际从数据库中删除,我只是不需要在我的查询中出现数据。我该如何处理?

3 个答案:

答案 0 :(得分:3)

假设客户编号将记录链接在一起,您可以使用not exists子句:

select *
  from tbl t1
 where not exists (select *
                    from tbl t2
                   where t2.[Customer#] = t1.[Customer#]
                     and t2.Flag = 4)

答案 1 :(得分:2)

这是一种方法:

delete from sample
    where customer# in (select customer# from sample as s2 where flag = 4);

编辑:

您可以轻松地将其改编为select

select s.*
from sample s
where customer# not in (select customer# from sample as s2 where flag = 4);

答案 2 :(得分:2)

三种方法。

  1. 使用不存在
  2. 使用不在
  3. 的地方
  4. 使用加入
  5. 以下是加入:Sstan提供的不存在,而Gordon或多或少提供了在哪里但是改为不在和选择,你也有。

    如果没有表格大小的翻译量和索引信息,我不能说哪个会提供最佳性能,尽管不存在是最受欢迎的。

    SELECT A.*
    FROM TableName A
    LEFT JOIN TableName B
     on A.Customer# = B.Customer#
    and B.Flag = 4
    WHERE B.Customer# is null
    

    这是一个自连接,但仅限于一组标记为4的记录,然后排除那些匹配的记录;只返回没有4的客户#。

相关问题