我无法理解如何在不生成大量重复字段的情况下执行多表连接。内部连接的重复字段
比方说,我有三个表:
- 家庭:ID,名称
- 父:身份证,家庭,名字
- 孩子:身份证,家庭,名字
如果我做了一个简单的选择:
select family.id, family.name from family
order by family.id;
我得到简单的列表:
ID Name
1 Smith
2 Jones
3 Wong
如果我添加一个内部联接:
select family.id, family.name, parent.first_name, parent.last_name
from family
inner join parent
on parent.family = family.id
order by family.id;
我得到了一些重复字段:
ID Name Parent
1 Smith Howard Smith
1 Smith Janet Smith
2 Jones Phil Jones
2 Jones Harriet Jones
3 Wong Billy Wong
3 Wong Rachel Wong
如果我再添内部联接:
select family.id, family.name, parent.first_name, parent.last_name
from family
inner join parent
on parent.family = family.id
inner join child
on child.family = family.id
order by family.id;
我得到更多重复的字段:
ID Name Parent Child
1 Smith Howard Smith Peter Smith
1 Smith Howard Smith Sally Smith
1 Smith Howard Smith Fred Smith
1 Smith Janet Smith Peter Smith
1 Smith Janet Smith Sally Smith
1 Smith Janet Smith Fred Smith
2 Jones Phil Jones Mark Jones
2 Jones Phil Jones Melissa Jones
2 Jones Harriet Jones Mark Jones
2 Jones Harriet Jones Melissa Jones
3 Wong Billy Wong Mary Wong
3 Wong Billy Wong Jennifer Wong
3 Wong Rachel Wong Mary Wong
3 Wong Rachel Wong Jennifer Wong
我愿意,因为它更可读的,是这样的:
ID Name Parent Child
1 Smith Howard Smith Peter Smith
Janet Smith Sally Smith
Fred Smith
2 Jones Phil Jones Mark Jones
Harriet Jones Melissa Jones
3 Wong Billy Wong Mary Wong
Rachel Wong Jennifer Wong
我知道的内部的加入带来的好处之一是避免通过笛卡尔呈现过剩信息产品。但似乎我得到了与多表连接类似的东西。有没有一种方法可以像上面显示的那样对每个组进行总结,还是需要使用像Python这样的脚本语言进行后处理?
感谢,
--Dan
您没有获取重复记录 - 每行返回不同的数据。这与获得笛卡尔产品不同。这可能比您的数据访问层更适合您的表示层。 – sgeddes