当前位置:  开发笔记 > 数据库 > 正文

使用内部联接删除

如何解决《使用内部联接删除》经验,为你挑选了1个好方法。

我想从表中删除一些数据.我想删除内部联接中未包含的数据

我的查询到目前为止:

 DELETE *how do you say delete what wasn't included in the inner join?*
 from dbo.Cloudpie c
 inner join dbo.cake p
 on c.cakeid = p.cakeid
where cakeid > 1

在此先感谢所有提供的任何帮助:)!



1> Tim Schmelte..:

你可以使用LEFT OUTER JOIN:

DELETE c
FROM dbo.Cloudpie c
LEFT OUTER JOIN dbo.cake p
    ON c.cakeid = p.cakeid
WHERE p.cakeid IS NULL AND c.cakeid > 1

甚至更简单,更不容易出错(在可空列上)使用NOT EXISTS:

DELETE c
FROM dbo.Cloudpie c
WHERE NOT EXISTS( SELECT 1 FROM dbo.cake p
                  WHERE p.cakeid = c.cakeid ) 
AND c.cakeid > 1

值得一读:http://www.sqlperformance.com/2012/12/t-sql-queries/left-anti-semi-join

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有