2012-06-14 3 views
2

У меня есть две таблицы, одна с ID и NAMEMySQL Query тот же столбец дважды

таблице 1

ID | NAME 
1 | first 
2 | second 
3 | third 

и таблицу XREF с идентификатором и МАТЕРИНСКОЙ ID

таблица2

ID | PARENT ID 
1 | 0 
2 | 1 
3 | 2 

, и я хотел бы дважды получить имя пользователя: NAME | РОДИТЕЛЕЙ ИМЯ

Если можно пройти три уровня глубины, но с той же таблицы 2 колонки, как это:

таблица результатов

NAME | PARENT NAME 
first | NULL or EMPTY or this line the not showing at all 
second | first 
third | second 

... тогда я хотел бы понять это тоже.

+0

для недостающей строки вы должны взглянуть на внешних соединений (HTTP: // эн. wikipedia.org/wiki/Join_(SQL)#Outer_joins). Что касается «глубины», я не думаю, что правильно понял, что вам нужно, поэтому, пожалуйста, постарайтесь, если возможно, добавить более подробную информацию и примеры. – Morfic

+0

Для 3 уровней просто добавьте еще одно соединение. То, что вы пытаетесь сделать, это иерархические запросы mysql http://stackoverflow.com/questions/8104187/mysql-hierarchical-queries в вашем случае, у вас несколько таблиц, но концепция по-прежнему аналогична. – xQbert

ответ

1
select t1.Name, t12.Name from 
table1 t1 
inner join table2 t2 on t1.ID = t2.ID 
inner join table1 t12 on t2.ParentID = t12.ID 

Это только вернет 2 строки. Если вы хотите иметь первую строку (для ID = 1), вам просто нужно вместо outer join.

+0

Спасибо! Я думал об этом весь день и не мог решить моими сестрами. Спасибо снова –

1

Рассмотрите возможность размещения parentid в первой таблице как самореферентную связь, а не отдельную таблицу для нее.

Ex .:

table1

ID | PARENTID | NAME 
--------------------------- 
1  NULL   first 
2  1   second 
3  2   third 

Таким образом, вам нужно будет только присоединиться к таблице на себя, а не через 3-й таблице. (Это, однако при условии, что строки в table1 может иметь только одного родителя, в то время как ваша конструкция позволяет один ряд, чтобы иметь несколько родителей в то время)

Но для вашей структуры таблицы, это будет работать:

SELECT 
    a.name, 
    c.name AS 'PARENT NAME' 
FROM 
    table1 a 
LEFT JOIN 
    table2 b ON a.id = b.id 
LEFT JOIN 
    table1 c ON b.parentid = c.id 

Но если вы сделали ParentID в той же таблице, ссылающегося идентификатор, то SQL будет сводится к этому:

SELECT 
    a.name, 
    b.name AS 'PARENT NAME' 
FROM 
    table1 a 
LEFT JOIN 
    table2 b ON a.parentid = b.id 
+0

Я не могу изменить таблицы, потому что db подключен к веб-сервису партнера, который следует этой структуре, и, конечно же, он не был сделан мной :), но спасибо за ваше время и за вашу помощь! –

+0

Нет проблем! Рад, что ты заработал! знак равно –

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