我无法弄清楚我的删除语句是怎么回事,它想要删除比select语句返回的行多得多的行。
如果我在MS Access查询中运行以下命令,我会得到168行:
Select dbo_member.memberid from claims JOIN dbo_member on (claims.idnum = dbo_member.idnum);
dbo_member是一个SQL表,在MS Access中链接。声明是仅在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);)
当我之前做了一些其他删除语句时,它们有效,但我不记得那些加入它们的人。
答案 0 :(得分: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);
)
表示要删除 [声明]表格中的每一行。为什么?这是因为您没有在子查询中包含WHERE子句,将其与外部查询相关联。因此,当数据库引擎询问“外部查询中的当前行的子查询中是否存在行?”答案总是“是”。
我真正想要的 是
DELETE FROM claims
WHERE
idnum IN
(
SELECT idnum FROM dbo_member
)