Sql 如果满足条件,则删除记录的所有实例
如果标志字段中的值为4,我将尝试删除记录的所有实例。这意味着他们已从电子邮件列表中取消订阅 样本数据:Sql 如果满足条件,则删除记录的所有实例,sql,ms-access,Sql,Ms Access,如果标志字段中的值为4,我将尝试删除记录的所有实例。这意味着他们已从电子邮件列表中取消订阅 样本数据: Customer# Email Name CustomerType Flag 001 email@email.com Bob Vet 1 001 email@email.com Bob Med 2 001 email@email.com
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
因此,由于存在一个实例,该记录的标志为4,因此应从该查询中删除所有3个。它们实际上不需要从数据库中删除,我只是不需要在查询中出现数据。如何处理此问题?假设客户编号是将记录链接在一起的内容,则可以使用not exists子句: 这里有一种方法:
delete from sample
where customer# in (select customer# from sample as s2 where flag = 4);
编辑:
您可以随时将其调整为选择:
三种方法
用途不存在
在不在的地方使用
使用连接
下面是join:Sstan提供了notexists,Gordon或多或少提供了where-in,但更改为not-in和select,您也可以使用它
没有表大小的翻译量和索引信息,我不能说哪一个性能最好,尽管不存在的是最受欢迎的
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的客户。我肯定您忽略了这一点:他们实际上不需要从列表中删除database@xQbert . . . 谢谢,我错过了。谢谢你的回复!谢谢你的信息!这对解决这个问题很有帮助。谢谢斯丹,我相信这会对我有用。我感谢你的帮助!
select s.*
from sample s
where customer# not in (select customer# from sample as s2 where flag = 4);
SELECT A.*
FROM TableName A
LEFT JOIN TableName B
on A.Customer# = B.Customer#
and B.Flag = 4
WHERE B.Customer# is null