如何删除另一个表中存在的行?

Posted

技术标签:

【中文标题】如何删除另一个表中存在的行?【英文标题】:How to remove row that exists in another table? 【发布时间】:2012-07-11 16:58:58 【问题描述】:

我有两张桌子。主表是“CompleteEmailListJuly11”,第二个表是“CurrentCustomersEmailJuly11”。我想删除 CurrentCustomersEmailJuly11 基于电子邮件的 CompleteEmailListJuly11 表中的行。

我已经尝试过以下删除示例,但它并没有做任何接近我想要做的事情。这仅向我显示数据库中存在的那些,它不会向我显示不匹配的电子邮件列表。

DELETE * FROM CompleteEmailListJuly11 AS i 
WHERE EXISTS ( 
    SELECT 1 FROM CurrentCustomersEmailJuly11 
    WHERE CurrentCustomersEmailJuly11.email = i.EmailAddress
)

非常感谢您的帮助。

【问题讨论】:

你是什么意思它显示你那些存在于数据库中......它是一个DELETE。 DELETE 命令不应该向您显示任何内容...它们应该删除内容。 您将“i”设为 CompleteEmailListJuly11 的别名。您可能无法在嵌套的 SELECT 语句中将该表称为“i”。 @Smandoli:为什么不呢?这是一个相关的子查询。这是否适合他的需要是另一个问题,但这种事情应该是严格合法的。 那我一定是错过了什么。是的,它是一个删除语句,但在 Access 2007 中它不会删除任何内容,它只会显示匹配项。然后,当我尝试根据上面列出的查询进行导出时,它仍然只显示应该删除的项目。 没关系显然宏被设置为禁用叹息。 【参考方案1】:

这是我认为您需要的查询:

DELETE FROM CompleteEmailListJuly11
WHERE EmailAddress IN (SELECT email FROM CurrentCustomersEmailJuly11)

Ps:DELETE 查询不会删除单个字段,只会删除整行,因此 * 不是必需的,您还需要“执行”此查询而不是“预览”或“导出”

【讨论】:

【参考方案2】:

如果您在 Access 的查询设计器中构建 DELETE 查询,请注意有两种不同的操作模式,类似于“继续执行此操作”。

    数据表视图(由功能区“设计”部分上标记为“视图”的网格图标表示)。该视图使您能够预览受影响的记录,但实际上并不会删除它们。 “运行”图标(由红色感叹号表示)。 “运行”将实际执行查询并删除受影响的记录。

如果您已经知道这一点,我的描述可能会显得侮辱性。对不起。但是,Access 新手似乎很容易忽略它们之间的区别。

【讨论】:

+1 如您所说,如果您没有花太多时间使用 Access,很容易忽略【参考方案3】:

你可以使用类似这样的东西来删除

  SELECT ... // complete
  EXCEPT
  SELECT ... // current

我不确定它是如何映射到删除的,但请看一下。

我喜欢类似的问题:How do I 'subtract' sql tables?

【讨论】:

【参考方案4】:

我们可以使用相关查询来解决问题,例如

DELETE FROM COMPLETE C 
WHERE EMAIL = (SELECT EMAIL FROM CURR CU WHERE CU.EMAIL=C.EMAIL);

【讨论】:

以上是关于如何删除另一个表中存在的行?的主要内容,如果未能解决你的问题,请参考以下文章

删除一个表中存在而另一个表中不存在的数据?

如何获取另一个表中不存在的表的记录?

根据另一个表中的值删除行

如何从一个表中获取另一表中不存在的行

怎样将EXCEL工作表中某列数值小于一个数的行删除,或将工作表中某列数值大于一个数的行统计到另一个工作表

如何从一个表中删除与另一表匹配的行?