sql - 使用 JOIN 时如何在 MS Access 中删除?

标签 sql ms-access delete-row sql-delete

我正在尝试使用 DELETE MS Access 中的子句,并且在使用 JOIN 时出现问题条款。我注意到这可以通过使用 DISTINCTROW 来完成。关键词。

例如,下面的 SQL 语句不允许删除:

DELETE Table1.*
FROM Table1 INNER JOIN Table2 ON Table1.Name=Table2.Name;

但是,此语句确实:
DELETE DISTINCTROW Table1.*
FROM Table1 INNER JOIN Table2 ON Table1.Name=Table2.Name;
  • 为什么DELETE使用 DISTINCTROW 时工作关键词?
  • 更具体地说,在 JET 引擎中发生了什么需要这样做?
  • 最佳答案

    Delete Table1.*
    From Table1
    Where Exists( Select 1 From Table2 Where Table2.Name = Table1.Name ) = True
    

    为了扩展我的回答,官方 SQL 规范没有专门规定在操作查询中使用连接,因为它会产生不明确的结果。因此,如果您可以像我在这里那样避免在操作查询中使用联接,那就更好了(而且 Access 更快乐)。 Access 需要 DISTINCTROW 的原因是两个表之间的连接很可能会创建 Table1 行的重复项(即,Table2 中有多个相关行),因此 Access 会感到困惑。我还发现,如果您尝试使用 Join 而主键不存在,Access 会犹豫不决。一般来说,如果可以,最好避免在操作查询中加入。

    关于sql - 使用 JOIN 时如何在 MS Access 中删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5585732/

    相关文章:

    c# - Excel 自动化 C# : How to delete multiple rows?

    sql - 根据第三个表中定义的关系连接两个表

    java - jOOQ 中按日历周分组

    vba - 换行时字符串拆分

    sql - 用于打开链接表 Access -> SQL server (vba) 的连接字符串

    mysql - 使用删除按钮从数据库中永久删除行(laravel)

    php - 当数据库结构在版本之间发生变化时如何升级Magento?

    mysql - 创建未出现值的所有行的列表

    c# - 如何使用 MS ACCESS QUERY 消除重复值

    sql - 从表A中删除加入Redshift中的表A