【问题标题】:SQL Delete Query where record without match is deleted?SQL Delete Query 在哪里删除不匹配的记录?
【发布时间】:2013-11-21 20:35:05
【问题描述】:

我正在尝试使删除查询正常工作,但不断出现运行时错误。 我正在尝试做的事情: 取一张表,将其与另一张表进行比较,然后删除后一张表中 id 字段不匹配/为空的记录。 基本上,我正在尝试删除第二个表中但不在第一个表中的记录。

我的查询的SQL如下(它是通过访问生成的,可能完全错误):

DELETE [Training Summary].*
FROM [Training Summary] LEFT JOIN [Temporary for MRC Update] ON [Training Summary].[DHV ID Number] = [Temporary for MRC Update].[Id]
WHERE ((([Temporary for MRC Update].Id) Is Null));

【问题讨论】:

  • 如果您告诉我们那些“运行时错误”实际上是什么,您不认为这会有所帮助吗?
  • @JohnnyBones 他们在达到 15 个代表之前无法投票,但你是对的:在超过 8 个问题的 11 个答案中,你希望其中至少有一个值得 @987654322 @.
  • 那是我的错,我一直忙得不可开交。我回去接受了帮助我的人(就像约翰尼所做的那样(很多......))
  • @sammorris - 我有两个问题;确切地说,您想从哪个表中删除数据(请给我们名称,以便非常清楚),您能否告诉我们您在运行原始代码时遇到的运行时错误的确切措辞?除非以下答案之一已经有所帮助,在这种情况下,这些问题的答案是不必要的。我的猜测是它可能是类型转换错误。如果是这种情况,请确保两个表中的数据类型相同(例如,两个表中的 ID 字段都是 INTEGER)。

标签: sql ms-access subquery sql-delete


【解决方案1】:
DELETE Table2.*
FROM Table2
WHERE ID NOT IN (
     SELECT ID
     FROM Table1
)

【讨论】:

    【解决方案2】:

    这与您想要的相反。它将删除第一个表中但不是第二个表中的记录。换个名字就好了。

    【讨论】:

      【解决方案3】:
      DELETE * FROM [Training Summary]
      WHERE [DHV ID Number] NOT IN (
           SELECT [Id]
           FROM [Temporary for MRC Update]
      )
      

      【讨论】:

      • 这会引发错误,要求选择表。我在这里错过了什么?
      • @sam morris,更正了我的答案。我错过了*
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-11
      • 1970-01-01
      • 1970-01-01
      • 2016-07-07
      • 1970-01-01
      相关资源
      最近更新 更多