自连接是 SQL 中的一种连接类型,我们将一个表与同一个表连接起来。我们将使用自连接解决 SQL 问题。
原始数据:
PersonName | ParentName | Status |
---|---|---|
A | X | Alive |
B | Y | Dead |
X | X1 | Alive |
Y | Y1 | Alive |
X1 | X2 | Alive |
Y1 | Y2 | Dead |
注意:这里的状态栏是针对狗狗个人而不是针对狗狗父母的。
从上面的数据我们可以看到,如果我们可以获得父级的状态,那么我们将对所需的输出进行计数。现在我们可以看到父列中有一些名字出现在人员列中。
PersonName | PersonStatus | ParentName | ParentStatus |
---|---|---|---|
A | Alive | X | Alive |
B | Dead | Y | Alive |
X | Alive | X1 | Alive |
Y | Alive | Y1 | Dead |
X1 | Alive | X2 | Null |
Y1 | Dead | Y2 | Null |
这是 SQL 查询和输出
with x as
(select p.PersonName,p.Status as PersonStatus,p.ParentName
,p1.Status as ParentStatus )
from persons p
left join persons p1
on p.ParentName =p1.PersonName
select count(PersonName) as alive_counts
from x
where ParentStatus='Alive'
上述输出 结果=3
可以从 CTE x 获得。想象一下,您就会得到答案。