2014-02-15 3 views
0

Мой вопрос немного фиктивный, но SQL никогда не был моей чашкой чая. У меня есть простая таблица с тремя столбцами: id, name, parent_id (ссылаясь на идентификатор в той же таблице).mySQL self join элегантно

Я просто хочу, чтобы получить соответствующие результаты, чтобы отобразить их в HTML-странице: ID/Name/Имя родителя

Я могу запросить следующим образом:

select id, name, parent_id from fields 
union 
select a.id, a.name, b.name 
from fields a, fields b 
where b.parent_id = a.id; 

и сделать некоторые тесты, но я могу понять, что он существует более элегантно.

Thx.

+0

Пожалуйста Почтовый индекс вы имеете tried.Then я могу помочь вам исправить это –

ответ

2

Этот запрос лучше всего достигается с помощью LEFT JOIN. Таким образом, вы все равно можете возвращать поля, которые не имеют parent_id, то есть NULL. Вы также захотите выбрать parent_name с использованием псевдонима (parent_name в примере). Это позволит вам программно ссылаться на результат по его имени, а не на индекс числового столбца ($row->parent_name vs $row[2], если PHP является вашим языком выбора).

SELECT f1.id, f1.name, f2.name parent_name 
FROM fields f1 
LEFT JOIN fields f2 ON f2.id = f1.parent_id 

http://sqlfiddle.com/#!2/a9632/1/0

+0

+1 для 'ЛЕВЫЙ JOIN'. У ОП уже есть 3 разных псевдонима столбца в его исходном запросе ('id',' name', 'parent_id'). –

+0

Спасибо! именно то, что мне нужно. – user1074922

0
SELECT A.id AS ID, A.name AS Name, B.name AS Parent 
FROM fields A, fields B 
WHERE A.parent_id = B.id