这是一个MS Access(2010)脚本。
我试图连接2个表的单个表的2个字段。然后,如果两个表中的连接字段相等,我想删除其中一个表中的关联记录(意味着这是重复的)。
我知道如何通过循环记录在VBA中执行此操作,但我想在SQL中执行此操作,因为表可能会快速保存超过50000条记录,这意味着循环将达到2,500,000,000次。
我虽然可以创建一个2 SELECT语句,以便为两个表创建连接字段。 SELECT语句还将显示基础表的ID。然后我将使用ID删除相应表中的记录。
这些是我的Select语句:
SELECT [Tick] & [Div_ex_date] AS Expr2, tblBbgDivData.ID
FROM tblBbgDivData
GROUP BY [Tick] & [Div_ex_date], tblBbgDivData.ID;
和
SELECT [Security_Name] & [Div_ex_date] AS Expr1, tblArchiveBbgDivData.ID
FROM tblArchiveBbgDivData
GROUP BY [Security_Name] & [Div_ex_date], tblArchiveBbgDivData.ID;
这是我的DELETE声明:
DELETE tblArchiveBbgDivData.*
FROM (tblArchiveBbgDivData
INNER JOIN qselUniqueID_Archive ON tblArchiveBbgDivData.ID = qselUniqueID_Archive.ID)
INNER JOIN qselUniqueID_BbgDiv ON qselUniqueID_Archive.Expr1 = qselUniqueID_BbgDiv.Expr2
WHERE (((tblArchiveBbgDivData.ID)=[qselUniqueID_Archive].[ID])
AND ((qselUniqueID_Archive.Expr1)=[qselUniqueID_BbgDiv].[Expr2]));
当我点击数据表视图时,会显示相关记录但是当我点击Run时,我会收到“无法从指定的表中删除”。知道如何改变它吗?
答案 0 :(得分:1)
访问在JOIN
语句中与DELETE
无效。使用IN
:
DELETE tblArchiveBbgDivData.*
FROM (tblArchiveBbgDivData
WHERE tblArchiveBbgDivData.ID IN
(SELECT qselUniqueID_Archive.ID
FROM qselUniqueID_Archive )
INNER JOIN qselUniqueID_BbgDiv
ON qselUniqueID_Archive.Expr1 = qselUniqueID_BbgDiv.Expr2
);
请注意,WHERE
是多余的,因为您在JOIN
语法中使用了相同的表达式。