sql - 如何从一个表中选择另一个表中没有外键的记录
问题描述
当 F_CODE = 'A' 时V_CODE
,我想选择V
其中的记录不共享任何 S
外键。F
我尝试了类似的东西
select distinct V_CODE
from V
inner join V_S VS on V.V_ID = VS.V_FK
inner join S on VS.S_FK = S.S_ID
where S._ID not in (
select FS.S_FK
from F
inner join F_S on F.F_ID = F_S.F_FK
where F.F_CODE = 'A'
);
但这并不能完全返回我想要的。有人可以帮忙吗?提前致谢。
表 F
| F_ID | F_CODE |
| 1 | A |
| 2 | B |
| 3 | C |
表 F_S
| F_FK | S_FK |
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
表 S
| S_ID | S_CODE |
| 1 | S1 |
| 2 | S2 |
| 3 | S3 |
表 V_S
| V_FK | S_FK |
| 1 | 1 |
| 1 | 2 |
| 2 | 3 |
| 3 | 1 |
| 3 | 3 |
表五
| V_ID | V_CODE |
| 1 | V1 |
| 2 | V2 |
| 3 | V3 |
在这种情况下,我只想返回V2
,因为当 F_CODE = 'A' 时,它是表中唯一V
不共享表中记录的记录S
解决方案
如果我理解正确,当您遵循表之间的关系时,您希望v_code
s 没有。f_code = 'A'
对我来说,这表明not exists
:
select v.*
from v
where not exists (select 1
from v_s join
f_s
on v_s.s_fk = f_s.s_fk join
f
on f_s.f_fk = f.f_id
where f.f_code = 'A' and vs.v_fk = v.v_id
);
推荐阅读
- angular - 需要用角度打字稿格式化我的数组
- c# - WebSocket 异步发送和接收数据(使用 NuGet websocket-client)
- pip - Can't configure spatialite because it can't detect PROJ (libproj)
- wordpress - 令牌在WordPress中一次又一次地过期或撤销
- android - 使用 LightCompressor 的视频压缩不起作用
- python - Mac 不读取 pytube 包
- python - 如何从雅虎财经获取日期
- mongodb - 使用 JSON 视图插入带有日期时间字段的文档
- mysql - 我无法使用 docker-compose 从服务器容器连接 mysql 容器
- matlab - inf 区间中的 MATLAB 卷积