Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何删除另一个表中存在的行?_Sql_Ms Access_Ms Access 2007 - Fatal编程技术网

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

Sql 如何删除另一个表中存在的行?,sql,ms-access,ms-access-2007,Sql,Ms Access,Ms Access 2007,我有两张桌子。主表是“CompleteEmailListJuly11”,第二个表是“CurrentCustomerEmailJuly11”。我想删除CompleteMailListJuly11表中CurrentCustomerEmailJuly11基于电子邮件的行 我已经尝试了下面的删除示例,但它没有做任何接近我尝试做的事情。这只显示数据库中存在的邮件,不显示不匹配的邮件列表 DELETE * FROM CompleteEmailListJuly11 AS i WHERE EXISTS (

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

我已经尝试了下面的删除示例,但它没有做任何接近我尝试做的事情。这只显示数据库中存在的邮件,不显示不匹配的邮件列表

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
查询,请注意,有两种不同的操作模式与“继续并执行此操作”类似

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

  • 如果你已经知道这一点,我的描述可能会显得有侮辱性。很抱歉然而,新接触的人似乎很容易忽略他们之间的区别。

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

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

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

    这是什么意思?它显示数据库中存在的字段。。。这是一个
    删除
    。删除命令不应该显示任何内容。。。他们应该删除东西。你把“i”作为CompleteMailListJuly11的别名。在嵌套的SELECT语句中,您可能无法将该表引用为“i”。@Smandoli:为什么不能?这是一个相关子查询。这是否符合他的需要是另一个问题,但这类事情应该是严格合法的。那时我肯定错过了什么。是的,这是一个delete语句,但在access2007中,它不会删除任何内容,只会显示匹配的项。然后,当我尝试根据上面列出的查询进行导出时,它仍然只显示应该删除的项。无论如何,宏的设置显然是禁用的+1正如您所说,如果您没有花太多时间使用Access,则很容易被忽略