【问题标题】:Delete query error message:"specify the table containing records u want to delete"删除查询错误信息:“指定包含您要删除的记录的表”
【发布时间】:2011-10-06 07:17:44
【问题描述】:

如果记录也在表 D 中,我想删除表“T”中的所有记录,但我收到错误消息“指定包含您要删除的记录的表”。

DELETE T.DISCOUNT_CODE, T.PART_ID, T.SELLING_UM, T.QTY_BREAK_1, T.QTY_BREAK_2, T.QTY_BREAK_3, T.QTY_BREAK_4, T.QTY_BREAK_5, T.QTY_BREAK_6, T.QTY_BREAK_7, T.QTY_BREAK_8, T.QTY_BREAK_9, T.QTY_BREAK_10, T.UNIT_PRICE_10, T.UNIT_PRICE_3, T.UNIT_PRICE_4, T.UNIT_PRICE_5, T.UNIT_PRICE_6, T.UNIT_PRICE_7, T.UNIT_PRICE_8, T.UNIT_PRICE_9, T.UNIT_PRICE_2, T.UNIT_PRICE_1, T.DEFAULT_UNIT_PRICE
 FROM SYSADM_DISCOUNT_PRICE AS T 
 INNER JOIN D ON T.PART_ID = D.PART_ID;

【问题讨论】:

    标签: sql ms-access sql-delete


    【解决方案1】:

    您没有在删除语句中指定列。你也不能加入删除语句。

    基本上,您从 table 中删除。因此,将所有条件逻辑放在 where 子句中。

    recordid 在哪里(选择......)

    【讨论】:

    • 我不懂 SQL。你能不能给我完整的代码和条件,所以我可以复制和粘贴?
    • 如果您不懂 SQL,为什么不使用 Access QBE 网格来编写查询?
    【解决方案2】:

    MS Access 确实允许您在删除时加入。因此,您可以像这样编写 DELETE 语句而不用命名列。

    DELETE T.*
    FROM SYSADM_DISCOUNT_PRICE AS T 
    INNER JOIN D ON T.PART_ID = D.PART_ID;
    

    【讨论】:

    • Access 2003 回复“指定包含要删除的记录的表”。
    • 奇怪,因为我在 Access 2003 中使用内部联接删除语句
    • 再一次,你是对的,我没有测试它是我的坏事。我已经更新了它并测试了代码,它对我有用。感谢您纠正我。
    • 好吧,开枪!那就是在 Access 2003 中给我“无法从指定的表中删除”的那个。如果它对你有用,那么猜测这证实了我的观点,即 Access DELETE 语句可能有点奇怪。 :-)
    • 如果您无法手动编写有效的 Jet/ACE DELETE 查询,只需使用该死的 QBE 网格编写基本语句即可。
    【解决方案3】:

    在 Access 中创建一个新查询,切换到 SQL 视图并将其粘贴到:

    DELETE 
    FROM SYSADM_DISCOUNT_PRICE AS T
    WHERE Exists (SELECT * FROM D WHERE D.PART_ID = T.PART_ID);
    

    如果您“运行”(执行)查询,这应该可以工作。如果要查看受影响的行而不实际执行 DELETE,可以将查询设计器视图切换到数据表视图。这将向您显示哪些行将被删除,但数据表视图仅显示它们......不会删除它们。但是,为了切换到数据表视图,您必须告诉查询设计器要显示哪些字段。您可以通过将第一行更改为 DELETE * 来做到这一点。

    另一种方法是将第一行更改为 SELECT * 以查看受影响的记录,然后在准备好删除它们时更改回 DELETE。

    【讨论】:

    • 在大表的情况下记得对这些ID字段进行索引,否则性能会低
    猜你喜欢
    • 1970-01-01
    • 2021-12-22
    • 2013-09-14
    • 1970-01-01
    • 2017-11-17
    • 1970-01-01
    • 1970-01-01
    • 2019-07-24
    • 2011-07-09
    相关资源
    最近更新 更多