2012-01-24 2 views
1

Я работаю над базой данных генеалогии. Проще говоря, одна таблица называется ancestors, состоит из записей со следующей структурой:Как сделать несколько самостоятельных соединений в mysql?

name_id | name | mother_id | father_id 
---------+------+-----------+----------- 
     1 | John |   2 |   3 
     2 | Mary |   4 |   5 
     3 | Dave |   6 |   7 

Первый запрос находит родительские идентификаторы для Джона: например, у Джона есть родители с идентификаторами 2 и 3

Затем еще два запросы найти родительские имена для родительских идентификаторов: родителя идентификатор 2 имеет имя Мария, и родительский идентификатор 3 имеет имя Dave

Три запросы были использованы, чтобы найти, что: Джона есть родители называют Мэри и Дэйвом.

Можно ли это сделать с помощью одного запроса, и будет ли какой-либо выигрыш в производительности?

ответ

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... 
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 
; 

И да, это как правило, быстрее запустить выше, чем запустить три отдельные поисковые запросы.

Смежные вопросы