数据库中 关于不能用in 不能用exist 等关键字 查询不出现字段的问题

这是之前在网上见到的一道题,后来心里略微想了想 觉得应该可能,所以就一闪而过了,之前去面试晨光的时候面试者问了我这道问题,当时也只是把自己的想法说了一下,可能因为当时面试的感觉不太好,面试官也没有追究细节(可能他觉得追究细节会显示他懂得太少于是就没有问我了吧 哈哈)

题目有点绕   我写个简单的例子 大家就都懂了

学生表  A

ID   NAME

1    tom

1    tom

2    jerry

3    henry

3     henry

学生表  B

ID    NAME

1    TOM  

2   JERRY

请问如何在不使用 in exist 等关键字的情况下   筛选出   在B表中不存在的A表中剩余的学生呢    


当时的想法很简单 很直观  

首先做出 a  left join b  之后的表  然后再做出  a inner join b 的表  

用这两个结果表   进行 差(减) 运算之后 剩余的  就是 没出现过的了,感觉好像可行,但是深思就觉得不行了,因为问题就处在  怎么做这个差运算上。后来问了几个同事  一直没有结果,今天正好问了一位leader    

他想了一下  告诉我说  其实很简单的  

就是  左连之后    加入一个 判断条件    右边剩余的 字段   需要为 null    那么这样的  结果就是 右边不存在的结果 

sql 可以为 

select a.*,b.* from a left join b on a.id=b.id 

where b.id is null

select  里边可以再加个   distinct 更友好一点    


 

posted @ 2014-06-18 22:20  王若伊_恩赐解脱  阅读(420)  评论(0编辑  收藏  举报