问题描述
这几天我一直在努力了解内连接的工作原理。
我有两个简单的表格(家庭关系):
- "persons" (id,fname,lname)
- “关系”(父母/孩子)
我学会了如何得到所有孩子的父母
SELECT p.firstname,p.lastname,c.firstname,c.lastname
FROM persons p
INNER JOIN relationships ON p.id = relationships.parent
INNER JOIN persons c ON c.id = relationships.child;
让所有孩子的祖父母代替怎么样?
这只是对该查询的调整还是涉及更多? 在我看来,我应该将相同的查询应用于查询(一次性递归),但我不知道如何。
感谢您的指导。
PS:内连接在纸面上很容易理解,但对我来说很难使用,因为我习惯于使用程序算法来创建脚本,但内连接根本不是程序应该的方式接近。所以我正在尝试分析用例以适应它们
解决方法
让所有孩子的祖父母代替怎么样?
首先,您的查询,但使用更好的关系名称:
SELECT p.firstname,p.lastname,c.firstname,c.lastname
FROM
relationships p_c
INNER JOIN persons p ON p.id = p_c.parent
INNER JOIN persons c ON c.id = p_c.child;
然后要获得祖父母:孩子,您必须通过父母:
SELECT p.firstname,c.lastname
FROM
relationships p_c
INNER JOIN relationships gp_p ON gp_p.child = p_c.parent --in a grandparent:parent relationship the child of the grandparent,is the parent of the grandchild in the parent:child
INNER JOIN persons gp ON gp.id = gp_p.parent --parent = the grandparent
INNER JOIN persons c ON c.id = p_c.child; --child = the grandchild
不确定我是否会选择这个示例来学习内部联接..此外,如果将关系列称为其他名称,例如 elder
和 younger
,可能会更容易考虑: )