如何像在 flat table 中一样检查规范化 table 中的两行

How to check two rows in normalized table as we do in flat table

平面Table结构

DudeTable
ID Dude NextDoorDude
1  Jim  Nick
2  Mike Mike

所以如果我写一个查询来比较它们,我会使用 SELECT count(*) FROM DudeTable WHERE Dude = NextDoorDude

标准化形式

DudeTable
ID DudeType Name
1  person   Jim
1  neighbor Nick
2  person   Mike
2  neighbor Mike

我如何编写一个查询来比较两行并获得与我对 flat table 所做的相似的结果?

这可能是一个简单的场景,但我不知道...谷歌搜索没有帮助我...希望这里有人能给出一些启示

一种方法使用聚合和 having 子句:

select id
from dudetable t
group by id
having max(case when dudetype = 'person' then name end) = max(case when dudetype = 'neighbor' then name);

另一种方法使用join:

select dp.id, dp.name
from dudetable dp join
     dudetable dn
     on dp.id = dn.id and
        dp.dudetype = 'person' and
        dn.dudetype = 'neighbor' and
        dp.name = dn.name