Sql 如何删除另一个表中存在的行?
我有两张桌子。主表是“CompleteEmailListJuly11”,第二个表是“CurrentCustomerEmailJuly11”。我想删除CompleteMailListJuly11表中CurrentCustomerEmailJuly11基于电子邮件的行 我已经尝试了下面的删除示例,但它没有做任何接近我尝试做的事情。这只显示数据库中存在的邮件,不显示不匹配的邮件列表Sql 如何删除另一个表中存在的行?,sql,ms-access,ms-access-2007,Sql,Ms Access,Ms Access 2007,我有两张桌子。主表是“CompleteEmailListJuly11”,第二个表是“CurrentCustomerEmailJuly11”。我想删除CompleteMailListJuly11表中CurrentCustomerEmailJuly11基于电子邮件的行 我已经尝试了下面的删除示例,但它没有做任何接近我尝试做的事情。这只显示数据库中存在的邮件,不显示不匹配的邮件列表 DELETE * FROM CompleteEmailListJuly11 AS i WHERE EXISTS (
DELETE * FROM CompleteEmailListJuly11 AS i
WHERE EXISTS (
SELECT 1 FROM CurrentCustomersEmailJuly11
WHERE CurrentCustomersEmailJuly11.email = i.EmailAddress
)
非常感谢您的帮助。您可以使用类似这样的内容进行删除
SELECT ... // complete
EXCEPT
SELECT ... // current
我不确定它到底是如何映射到删除的,但请看一看
我喜欢类似的问题:我们可以使用相关查询来解决如下问题
DELETE FROM COMPLETE C
WHERE EMAIL = (SELECT EMAIL FROM CURR CU WHERE CU.EMAIL=C.EMAIL);
如果要在Access的查询设计器中构建
DELETE
查询,请注意,有两种不同的操作模式与“继续并执行此操作”类似
如果你已经知道这一点,我的描述可能会显得有侮辱性。很抱歉然而,新接触的人似乎很容易忽略他们之间的区别。我认为您需要这样的查询:
DELETE FROM CompleteEmailListJuly11
WHERE EmailAddress IN (SELECT email FROM CurrentCustomersEmailJuly11)
Ps:DELETE查询不删除单个字段,只删除整行,因此*不是必需的,您还需要“执行”此查询,而不是“预览”或“导出”这是什么意思?它显示数据库中存在的字段。。。这是一个
删除。删除命令不应该显示任何内容。。。他们应该删除东西。你把“i”作为CompleteMailListJuly11的别名。在嵌套的SELECT语句中,您可能无法将该表引用为“i”。@Smandoli:为什么不能?这是一个相关子查询。这是否符合他的需要是另一个问题,但这类事情应该是严格合法的。那时我肯定错过了什么。是的,这是一个delete语句,但在access2007中,它不会删除任何内容,只会显示匹配的项。然后,当我尝试根据上面列出的查询进行导出时,它仍然只显示应该删除的项。无论如何,宏的设置显然是禁用的+1正如您所说,如果您没有花太多时间使用Access,则很容易被忽略