我正在研究一个家谱数据库。简单地说,一个名为ancestors
的表由具有以下结构的记录组成:
name_id | name | mother_id | father_id
---------+------+-----------+-----------
1 | John | 2 | 3
2 | Mary | 4 | 5
3 | Dave | 6 | 7
第一个查询查找John的父ID:
约翰的父母有身份证2和3
然后再进行两次查询,找到父ID的父名称:
父id 2的名称为Mary,父id 3的名称为Dave
有三个查询发现:
约翰的父母叫玛丽和戴夫。
这可以通过一个查询来完成吗?性能方面会有任何提高吗?
最佳答案
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
;
是的,运行上面的查询通常比运行三个单独的查询要快。