在引用其他表时在单个表上使用Delete查询

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在引用其他表时在单个表上使用Delete查询相关的知识,希望对你有一定的参考价值。

我想运行删除查询以使用MS Access查询从Sharepoint列表中的表中删除某些数据。但是我想确保只根据另一个表的值从单个列表中删除。

该表是TMainData:它仅包含对其他表中的键字段的引用的数字字段,例如具有程序名称的TProgram,或具有联系点的TContact,或具有类似Site Director的标题的TPositionTitle。

所以TMainData条目看起来像ProgramID,它链接到TPrograms:4 ContactID,它链接到TContacts:42 PositionTitle,它链接到TPositionTitle:3

这告诉我,麻醉学(ProgramID 4)的Site Director(TPositionTitle 3)是John Smith(ContactID 42)。

这是它变得棘手的地方:我在TPrograms下有一个参考TProgramType。我想删除TMainData下的所有记录,它们链接到某个程序类型,因为该程序类型正在消失。但是......我不想删除程序本身(还有),只是在TMainData中引用该程序的行。

我看到这样做的“手动”方式是运行查询,以识别我想删除联系人的程序的ProgramID是什么,然后在仅引用TMainData查询的删除查询中使用这些ID。我想知道是否有一种方法可以使用参考数据,因为我可能必须在以后运行一些荒谬的更新查询,这需要相同的信息。

我挖掘了https://support.office.com/en-us/article/Use-queries-to-delete-one-or-more-records-from-a-database-A323BF1A-C9B4-4C86-8719-BE58BDF1B10C,但它似乎没有涵盖根据另一个表中引用的值从一个表中删除。

答案

当您陈述时,您似乎已经明白了要达到预期结果所需要做的事情:

...运行查询,以确定我要删除联系人的程序的ProgramIDs是什么,然后在仅引用TMainData查询的删除查询中使用这些ID。

如果我已正确理解您的描述,我会建议以下内容:

delete from tmaindata
where 
tmaindata.programid in
(
    select tprograms.programid 
    from tprograms 
    where tprograms.tprogramtype = 'YourProgramType'
)

在运行delete查询之前,请始终备份数据 - 没有撤消。

以上是关于在引用其他表时在单个表上使用Delete查询的主要内容,如果未能解决你的问题,请参考以下文章

postgresql死锁处理

在 PostgreSQL 中的表上禁用 DELETE?

使用 2GB+ 加速单个表上的 SQL 查询

当我引用其他表时,如何保存在 Access 2003 中的表单中创建的数据?

索引和查询优化

执行查询时在服务器端出错