连接字段

时间:2013-12-09 15:00:56

标签: sql ms-access sql-delete

这是一个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时,我会收到“无法从指定的表中删除”。知道如何改变它吗?

1 个答案:

答案 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语法中使用了相同的表达式。