sql—如何从另一个表中没有外键的表中选择记录

ioekq8ef  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(362)

我的数据库里有5个表

我要选择 V_CODEV 哪些记录不共享 S 带的外键 F 当f_code='a'时。
我试过类似的方法

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\U 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 因为这是表中唯一的记录 V 不共享表中的记录 S 当f\ U代码='a'

ozxc1zmp

ozxc1zmp1#

如果我理解正确,你想 v_code 那些没有 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
                 );

相关问题