数据库中 关于不能用in 不能用exist 等关键字 查询不出现字段的问题
2024-08-29 10:39:48
这是之前在网上见到的一道题,后来心里略微想了想 觉得应该可能,所以就一闪而过了,之前去面试晨光的时候面试者问了我这道问题,当时也只是把自己的想法说了一下,可能因为当时面试的感觉不太好,面试官也没有追究细节(可能他觉得追究细节会显示他懂得太少于是就没有问我了吧 哈哈)
题目有点绕 我写个简单的例子 大家就都懂了
学生表 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 更友好一点
最新文章
- C#使用GET、POST请求获取结果
- 理解Cookie和Session机制(转)
- iOS 图形处理 Core Graphics Quartz2D 教程
- C#--静态字段
- Routine
- css中position属性(absolute|relative|static|fixed)概述及应用
- hdu1507二分匹配
- 使用Spring的注解方式实现AOP
- Java 7 命令/工具 jcmd 使用详细解释
- .net 程序员成长路线图?
- 在Spring中使用cache(EhCache的对象缓存和页面缓存)
- mysql存储过程讲解
- linux系统下安装apache与tomcat
- mysql的数据类型int、bigint、smallint 和 tinyint取值范围 及varchar
- input, textarea,监听输入事件
- Java 理论与实践: 处理 InterruptedException(转)
- Windows Cygwin Redis 安装(转)
- 半小时C语言题目
- python 网络编程粘包解决方案2 + ftp上传 + socketserver
- js 时间戳转换为‘yyyy-MM-dd hh:mm’格式(es6语法)