使用多个表中的条件删除查询:Access 2010

时间:2015-05-05 15:28:51

标签: sql ms-access-2010 sql-delete

我正在尝试删除" AC_DETAIL"在" AC_PROPERTY"中满足特定条件的表表;但是,当我运行查询时,我收到错误"无法从指定的表中删除。"我正在使用MS Access 2010并且相当新。任何人都知道为什么这是错误的以及它如何被修复工作?

 pushBroker.QueueNotification(new AppleNotification()    .ForDeviceToken(deviceToken).WithAlert("Alert Body").WithBadge(1).WithSound("sound.caf").WithCustomItem("level", level).WithContentAvailable(1));

1 个答案:

答案 0 :(得分:0)

您混合了DELETESELECT语法,您无法在DELETE语句中显式连接表。 使用MS Access 2000,我认为您可以使用这样的解决方法(我现在无法对其进行测试,因此我不确定它是否会起作用):

DELETE AC_DETAIL.* FROM AC_DETAIL WHERE EXISTS (
    SELECT 1 FROM AC_PROPERTY WHERE
        AC_PROPERTY.YEAR    = AC_DETAIL.YEAR    AND
        AC_PROPERTY.NUM     = AC_DETAIL.NUM     AND
        AC_PROPERTY.YEAR    = "2015"            AND 
        AC_PROPERTY.REGION  = "CT"              AND 
        AC_DETAIL.SOURCE    = "BPF"             AND 
        AC_DETAIL.SCENARIO  = "PRICES"          AND 
        AC_PROPERTY.STATUS  = "NO-PROD"
);

编辑:如果您在NUM表格中有一个字段AC_DETAIL作为主键,那么这样的内容应该有效:

DELETE FROM AC_DETAIL WHERE NUM IN (
    SELECT AC_DETAIL.NUM 
    FROM AC_DETAIL
    INNER JOIN AC_PROPERTY ON (AC_PROPERTY.YEAR = AC_DETAIL.YEAR) AND (AC_PROPERTY.NUM = AC_DETAIL.NUM) 
    WHERE (((AC_PROPERTY.YEAR)="2015") 
         AND ((AC_PROPERTY.REGION)="CT") 
         AND ((AC_DETAIL.SOURCE)="BPF") 
         AND ((AC_DETAIL.SCENARIO)="PRICES") 
         AND ((AC_PROPERTY.STATUS)="NO-PROD"));
    );