我正在研究家谱数据库。简单来说,一个名为ancestors
的表由具有以下结构的记录组成:
name_id | name | mother_id | father_id
---------+------+-----------+-----------
1 | John | 2 | 3
2 | Mary | 4 | 5
3 | Dave | 6 | 7
第一个查询查找John的父ID: 例如约翰的父母有ids 2和3
然后另外两个查询找到父ID的父名称: 父ID 2的名称为Mary,父ID 3的名称为Dave
已经使用了三个查询来查找: 约翰的父母叫玛丽和戴夫。
这可以通过单个查询完成,并且性能会有提升吗?
答案 0 :(得分:3)
SELECT me.name,
mother.name,
father.name
FROM ancestors me
JOIN ancestors mother
ON me.mother_id = mother.name_id
JOIN ancestors father
ON me.father_id = father.name_id
WHERE ancestors.id = 1
;
是的,运行上述操作通常比运行三个单独的查询查询更快。
答案 1 :(得分:2)
像往常一样加入,但每次只使用同一个表,为每个联接提供一个唯一的别名:
SELECT people.name_id, people.name, mothers.name_id, mothers.name, ...
FROM people
LEFT JOIN people AS mothers ON people.mother_id = mothers.name_id
LEFT JOIN people AS fathers ON people.father_id = fathers.name_id
etc...
答案 2 :(得分:1)
查看图形noSQL数据库。 它们非常适合您的计划: