如何像在普通表中一样检查规范化表中的两行

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

平面表结构

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

我如何编写查询以比较两行并获得与平表相似的结果?

这可能是一个简单的场景,但我不知道...谷歌搜索对我没有帮助...希望这里的人会有所帮助

sql database-normalization
1个回答
1
投票
[一种方法使用聚合和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

© www.soinside.com 2019 - 2024. All rights reserved.