如何删除另一个表中存在的行?
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);
【讨论】:
以上是关于如何删除另一个表中存在的行?的主要内容,如果未能解决你的问题,请参考以下文章