我正在研究一个家谱数据库。简单地说,一个名为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
;

是的,运行上面的查询通常比运行三个单独的查询要快。

10-08 16:05