如何在mysql中进行多个自联接?

时间:2012-01-24 14:44:44

标签: mysql join

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

已经使用了三个查询来查找: 约翰的父母叫玛丽和戴夫。

这可以通过单个查询完成,并且性能会有提升吗?

3 个答案:

答案 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数据库。 它们非常适合您的计划: