有3个集合, 从其中一个集合中删除同时存在于另外两个集合的元素

如下分享的邮件,在博客园做个记录,以便以后使用。

在这里,其实也想倡导一下程序员要具有的分享精神。鼓励大家多分享,平时有什么新的收获,最好在team里做个分享 。分享也是一种很好的事情。对团队来说,可以形成很好的工作氛围,通过提高每个人的能力进而增强组织战斗力。对个人来说,一来提高了自己的表达能力,二来,别人可能会提出一些疑问,自己通过学习可以掌握更全面更深入的知识。


发件人: ZHANGGUOZHAN
发送时间: 2013-01-10 15:22:02
收件人: zgz1230; guozhan_zhang; 853105539
抄送: jiangjuninfo; GREENSOUL; daizhize; yanwenjing
主题: 分享:有3个集合, 从其中一个集合中删除同时存在于另外两个集合的元素
 
---- ** 有3个集合, 从其中一个集合中删除同时不在另外两个集合的元素
---- ** 很简单的问题,我却思考良久才得到答案
CREATE TABLE #(id INT)
CREATE TABLE #A(id INT)
CREATE TABLE #B(id INT)

INSERT # VALUES(1),(2),(3),(4)
INSERT #A VALUES(1),(3)
INSERT #B VALUES(2),(3)

-- ** 从命题我们可知,要删除的集合是{3}


-- 先想到了这句sql, 进而知道了如何求解
SELECT * FROM # JOIN #A ON #.id=#A.id JOIN #B ON #.id=#B.id

-- 下面语句正确,可以得到我们想要的结果{3}
SELECT * FROM # WHERE  EXISTS(SELECT 1 FROM #a WHERE id=#.id)
AND  EXISTS(SELECT 1 FROM #b WHERE id=#.id)

-- PS:下面语句的结果是{4},即同时不在另外两个集合
SELECT * FROM # WHERE NOT EXISTS(SELECT 1 FROM #a WHERE id=#.id)
AND NOT EXISTS(SELECT 1 FROM #b WHERE id=#.id)

-- PS:下面语句正确,可以得到排除了同时在另外两个集合的元素后的集合:{1,2,4}
SELECT * FROM # WHERE NOT EXISTS(SELECT 1 FROM #a JOIN #B ON #A.id = #B.id WHERE #A.id=#.id)


DROP TABLE #,#A,#B

 


当看到一些不好的代码时,会发现我还算优秀;当看到优秀的代码时,也才意识到持续学习的重要!--buguge
本文来自博客园,转载请注明原文链接:https://www.cnblogs.com/buguge/archive/2013/01/10/2854962.html


原文地址:https://www.cnblogs.com/buguge/p/2854962.html