2013-12-09 43 views
0

这是一个MS Access(2010)脚本。连接字段

我想连接2个表的单个表的2个字段。然后,如果两个表中的连接字段相同(意味着这是重复的),我想要删除表中的关联记录。

我知道如何在VBA中通过循环遍历记录来做到这一点,但我想在SQL中这样做,因为表格可能会快速保存超过50000条记录,这意味着循环将会花费2,500,000,000次。

我虽然我可以创建一个2 SELECT语句为了创建两个表的连接字段。 SELECT语句还将显示基础表的ID。然后我会使用该ID在适当的表格中删除记录。

这是我的选择语句:

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])); 

当我打数据表视图,显示相关的记录,但当我点击运行时,我得到“无法从指定的表中删除”。任何想法如何我可以改变这一点?

回答

1

访问与JOIN s在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 
    ); 

需要注意的是,因为你在JOIN语法使用相同的表达你的WHERE是多余的。