平面表结构
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
我如何编写查询以比较两行并获得与平表相似的结果?
这可能是一个简单的场景,但我不知道...谷歌搜索对我没有帮助...希望这里的人会有所帮助
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