2015-07-10 48 views
0

我有这个表:Mysql的自联接给人怪异的结果

id|subject   | parent_id 
1 |ladbore   | 2 
2 |quod    | NULL 
3 |cumque   | 6 
4 |ut    | 3 
5 |sed    | NULL 
6 |reprehenderit | 1 
7 |qui    | 4 
8 |eum    | 6 
9 |deserunt   | 6 
10 |et    | 6 

现在我已经创建了一个自连接来获取所有科目包括父的,像这样的个体的名称:

SELECT 
`subject`. `id`, 
`subject`.`subject` AS `subject_name`, 
`parent`.`subject` AS `parent_name` 
FROM 
`subjects` AS `subject` 
LEFT JOIN 
`subjects` AS `parent` 
ON 
`parent`.`id` = `subject`.`id`; 

但是这给了我下面的怪异的结果:

id subject_name parent_name 
1 labore   labore 
2 quod   quod 
3 cumque   cumque 
4 ut    ut 
5 sed    sed 
6 reprehenderit reprehenderit 
7 qui    qui 
8 eum    eum 
9 eserunt   deserunt 
10 et    et 

为什么这给出错误的结果?

回答

1

由于您拥有parent.id = subject.id,因此您只需加入自己的记录。如果你想在你的表中的树形结构,那么你需要(id, parent_id, ...)的领域,并加入对subject.parent_id = parent.id

1

您的查询应该是

SELECT 
`subject`. `id`, 
`subject`.`subject` AS `subject_name`, 
`parent`.`subject` AS `parent_name` 
FROM 
`subjects` AS `subject` 
LEFT JOIN 
`subjects` AS `parent` 
ON 
`parent`.`id` = `subject`.`parent_id`;