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

时间:2012-07-11 16:58:59

标签: sql ms-access ms-access-2007

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

我在删除示例后尝试了这个,但它没有做任何接近我正在尝试做的事情。这只显示了数据库中存在的那些,它没有显示不匹配的电子邮件列表。

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

非常感谢帮助。

4 个答案:

答案 0 :(得分:10)

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

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

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

答案 1 :(得分:1)

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

  1. 数据表视图(由功能区“设计”部分标记为“视图”的网格图标表示)。该视图使您可以预览受影响的记录,但实际上并不删除它们。
  2. “运行”图标(由红色感叹号表示)。 “运行”实际上将执行查询并删除受影响的记录。
  3. 如果你已经知道这一点,我的描述可能看起来很侮辱。抱歉。然而,似乎新的访问者很容易忽视它们之间的区别。

答案 2 :(得分:0)

您可以使用适合删除的内容

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

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

我喜欢这个问题:How do I 'subtract' sql tables?

答案 3 :(得分:0)

我们可以使用相关查询来解决像

这样的问题
DELETE FROM COMPLETE C 
WHERE EMAIL = (SELECT EMAIL FROM CURR CU WHERE CU.EMAIL=C.EMAIL);