如果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
因为有一个实例,此记录的Flag
为4
,所以应该从此查询中删除所有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)
三种方法。
以下是加入: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的客户#。