NOT EXISTS
not exists常用于子查询跟主查询之间,用于条件判断,根据一个条件返回一个布尔值,从而确定下一步操作如何进行,not exists是exists或in的对立面
- exists可以返回多个值,exists不在乎返回的是什么,只在乎有没有结果集返回
- in只能返回一个值
story table
story_id | story_name | create_user_id | update_user_id |
---|---|---|---|
1 | 1111 | 1 | 2 |
2 | 2222 | 1 | 3 |
3 | 3333 | 4 | 10 |
4 | 4444 | 5 | 10 |
user table
user_id | user_name |
---|---|
1 | AAA |
2 | BBB |
3 | CCC |
4 | DDD |
select *
from story A
where not exists(
select 1 from user B where A.create = B.id
)
结果
story_id | story_name | create_user_id | update_user_id |
---|---|---|---|
4 | 4444 | 5 | 10 |
- 筛选出A表与B表用户id相同的数据记为X,比如首先筛选了story id 为1,2,3的数据
- 再从A表中筛选出不存在于X数据中的数据,比如story id为4的数据不存在于story id为1,2,3的数据中