7

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

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

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

非常感谢您的帮助。

4

4 回答 4

12

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

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

Ps: The DELETE query does not delete individual fields, only entire rows, so the * is not necessary, you will also need to "Execute" this query rather than "Previewing" or "Exporting"

于 2012-07-12T09:44:32.960 回答
1

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

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

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

于 2012-07-11T20:03:54.010 回答
0

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

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

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

我喜欢类似的问题:如何“减去”sql表?

于 2012-07-11T17:06:23.930 回答
0

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

DELETE FROM COMPLETE C 
WHERE EMAIL = (SELECT EMAIL FROM CURR CU WHERE CU.EMAIL=C.EMAIL);
于 2012-07-11T17:26:13.733 回答