如何像在 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
平面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