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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL - 获取除了在where条件下过滤的记录之外的其他记录。相关的知识,希望对你有一定的参考价值。

我有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;
答案

在一个 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;

以上是关于SQL - 获取除了在where条件下过滤的记录之外的其他记录。的主要内容,如果未能解决你的问题,请参考以下文章

我需要从 SQL Server 查询中获取前 5 条记录,但要计算满足 where 子句条件的所有记录

从零开始学SQL:where条件查询与连接

SQL 之 ON 和 WHERE执行顺序

SQL删除多个条件重复记录

SQL语句where多条件查询怎么写?

SQL语句关于where判断问题