SQL - 获取除了在where条件下过滤的记录之外的其他记录。

问题描述 投票:0回答:1

我有3张表。

TableA - Id, TableB_id

TableB - Id, Name, TableC_id

TableC - Id, Valid

有效值可以是0或1

TableA -> TableB & TableB -> TableC之间有一对多的关系。

我想获取TableA & TableB的所有记录,其中TableC.valid = 0。

另外,TableA & TableB的记录,即使TableC中没有关联的记录。

我已经写好了第一部分的查询,但是如何包含第二个条件?(如果可能的话,不使用联合的方式)

查询。

Select 
    a.id,
    b.id,
    b.name,
    c.id
from
    TableA a
    left join TableB b on a.TableB_id = b.id
    left join TableC c on b.TableC_id = c.id
where
    c.valid = 1;
sql oracle
1个回答
2
投票

在一个 left join除第一张表外,其他所有表的条件通常都是在第一张表的基础上进行的。on 条款。

Select a.id, b.id, b.name, c.id
from TableA a left join
     TableB b 
     on a.TableB_id = b.id left join
     TableC c
     on b.TableC_id = c.id and c.valid = 1;
© www.soinside.com 2019 - 2024. All rights reserved.