【问题标题】:SQL Delete QuerySQL 删除查询
【发布时间】:2010-06-08 22:23:34
【问题描述】:

我需要编写一个 SQL 脚本来选择 table1 中的一条记录,然后在数据库中的其余表中进行查找。如果它没有找到记录,我需要从 table1 中删除记录。有人提供一些示例脚本吗?

【问题讨论】:

  • 您能否提供更具体的解释来说明您要做什么?
  • 你为什么要一次一张地做这样的事情?
  • 最终目标是删除table1中没有对应记录的所有记录吗?
  • 你在多少张表中查找记录?
  • @VeeArr:我们有一个数据库,它根据日期时间戳从所有表中清除了记录,但有一个表没有日期时间戳。我需要从这里删除其他任何地方都不存在的记录。 @HLGEM:我不需要一次做一个记录,但我只想得到一个基本脚本。我已经完成了选择和删除记录存在的地方,但不是相反。我正在查找大约 10 张桌子。 @马丁史密斯:是的。 – jerle78 7 秒前编辑

标签: sql sql-server-2005


【解决方案1】:

一个例子

delete table1
where not exists (select 1 
                   from Table2 
                   where table1.SomeColumn = Table2.SomeColumn)
AND table1.SomeColumn = 5 --just an example, 

如果要从表 1 中删除表 2 中不存在的所有行,请忽略 AND

你也可以使用 LEFT JOIN 或 NOT IN

【讨论】:

    【解决方案2】:

    我做过这样的事情:

    DELETE table1
      FROM table1
     WHERE table1.ID NOT IN (
           SELECT RefID FROM Table2
           UNION
           SELECT RefID FROM Table3
           ...
           )
    

    假设 RefID 是 table1.ID 的 FK。这是你需要的吗?

    【讨论】:

    • 如果检查多个表,这将很有效。当然,我会将其设为“UNION ALL”。
    【解决方案3】:
    DELETE FROM Table1 WHERE id=10 AND NOT EXISTS (SELECT * FROM Table2 WHERE id=10);
    

    【讨论】:

      【解决方案4】:

      非常笼统,(因为您提供的细节很少)

      Delete Table1 t1
      Where [Criteria to find table1 Record]
        And Not Exists(Select * From Table2
                       Where pk = t1.Pk)
        And Not Exists(Select * From Table3
                       Where pk = t1.Pk)
        And Not Exists(Select * From Table4
                       Where pk = t1.Pk)
        ... etc. for all other tables
      

      【讨论】:

      • @VeeArr:我们有一个数据库,它根据日期时间戳从所有表中清除了记录,但有一个表没有日期时间戳。我需要从这里删除其他任何地方都不存在的记录。 @HLGEM:我不需要一次做一个记录,但我只想记录一个基本脚本。我已经完成了选择和删除记录存在的地方,但不是相反。我正在查找大约 10 张桌子。 @Martin Smith:是的。
      猜你喜欢
      • 1970-01-01
      • 2015-08-12
      • 2020-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-01
      相关资源
      最近更新 更多