sql - 如何删除不在其中的记录

标签 sql sql-server sql-delete

您好,我有以下 SQL 查询,它为我提供了 Scheme_Id,它同时存在于 ProjectSchemesSchemes 表中。我想删除 Schemes 表中没有 ProjectSchemes 表记录的所有记录。我怎样才能这样做呢?请帮忙。我正在使用 MSSQL

select scheme_id from Schemes where Scheme_Id
in(select s.Scheme_Id from Projects p 
inner join ProjectSchemes ps on ps.Project_Id=p.Project_Id
inner join Schemes s on s.Scheme_Id=ps.Scheme_Id)

我正在尝试执行以下操作,但它不起作用。不工作意味着没有记录受到影响,但当我检查我的Schemes表时,有太多记录,以至于在ProjectSchemes表中找不到它们的scheme_id

delete from Schemes where Scheme_Id
not in(select s.Scheme_Id from Projects p 
inner join ProjectSchemes ps on ps.Project_Id=p.Project_Id 
inner join Schemes s on s.Scheme_Id=ps.Scheme_Id)

最佳答案

DELETE FROM schemes
WHERE scheme_id NOT IN (
    SELECT DISTINCT scheme_id
    FROM projectschemes
    WHERE scheme_id IS NOT NULL
)

或者您也可以使用

DELETE
FROM schemes
WHERE NOT EXISTS (
      SELECT 1
        FROM projectschemes
       WHERE projectschemes.scheme_id = schemes.ID
      )

关于sql - 如何删除不在其中的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14953624/

相关文章:

php - SELECT 然后立即 DELETE mysql 记录

mysql - 这个不寻常的 CREATE TABLE 语法是什么?

sql-server - 我应该使用哪种 SQL Server 2005/2008 锁定方法来处理多个服务器应用程序实例中的各个表行?

sql - 如何在Sql Server中删除没有属性的xml节点

Mysql 使用另一个表中的信息从表中删除

sql-server - 引入 FOREIGN KEY 约束可能会造成环路或多级联路径。指定删除时不执行任何操作

通过powershell使用/变量进行SQL查询

sql - 自 FULL OUTER JOIN 的替代方案以获得两个条目之间的匹配

sql - 关于 SQL Server 中 INSERT 语句性能的建议

c# - 如何使用 List<> 作为 Linq 的 where 子句的条件?