0

我无法弄清楚我的 delete 语句发生了什么,它想要删除的行比 select 语句返回的行多得多。

如果我在 MS Access 查询中运行以下命令,我会得到 168 行:

Select dbo_member.memberid from claims JOIN dbo_member on (claims.idnum = dbo_member.idnum);

dbo_member 是一个 SQL 表,在 MS Access 中链接。Claims 是仅在 MS Access 中的表。

当我运行它时,MS Access 想要删除 130K 行:

Delete from claims where exists (Select dbo_member.memberid from claims JOIN dbo_member on (claims.idnum = dbo_member.idnum);)

当我早些时候做一些其他删除语句时,它们起作用了,但我不记得那些在其中加入的语句。

4

1 回答 1

2

您的问题有多个问题:

当我尝试在 Access 中执行以下查询时

Select dbo_member.memberid 
from 
    claims 
    JOIN 
    dbo_member 
        on (claims.idnum = dbo_member.idnum);

我收到“FROM 子句中的语法错误”。Access SQL 不支持非限定JOIN说明符。然而,

Select dbo_member.memberid 
from 
    claims 
    INNER JOIN 
    dbo_member 
        on (claims.idnum = dbo_member.idnum);

工作并返回 168 行。现在,对您的第二个查询应用相同的更正(暂时忽略虚假分号),

Delete from claims 
where exists 
    (
        Select dbo_member.memberid 
        from 
            claims 
            INNER JOIN 
            dbo_member 
                on (claims.idnum = dbo_member.idnum);
    )

表示它想删除[claims] 表中的每一行。为什么?这是因为您没有在将其与外部查询相关联的子查询中包含 WHERE 子句。因此,当数据库引擎询问“外部查询中当前行的子查询中是否存在行?”时。答案总是“是”。

认为你真正想要的是

DELETE FROM claims
WHERE 
    idnum IN
        (
            SELECT idnum FROM dbo_member
        )
于 2013-11-13T00:00:05.767 回答