2012-11-29 128 views
0

我有两个查询 1)树和2)单位查询LEFT JOIN不会返回预期的结果

第一查询

SELECT * FROM tree WHERE entity_id = 8656 

回报以下数据:

entity id | parent_id | length 
------------------------------- 
8656  | 8656  | 0 
8656  | 8655  | 1 
8656  | 8654  | 2 
8656  | 8653  | 3 
8656  | 4331  | 4 
8656  | 2   | 5 
8656  | 1   | 6 

第二查询

SELECT * FROM units WHERE activity_id =10066 

回报

id | activity_id | activity_name | region_id | region_name 
----------------------------------------------------------- 
136 | 10066  | Cricket  | 4331  | Yote 
137 | 10066  | Cricket  | 8653  | Handbreath 
140 | 10066  | Cricket  | 8656  | Kevb 

结果预计

entity id | parent_id | length | region_name 
    -------------------------------------------- 
    8656  | 8656  | 0  | Kevb 
    8656  | 8655  | 1  | null 
    8656  | 8654  | 2  | null 
    8656  | 8653  | 3  | Handbreath 
    8656  | 4331  | 4  | Yote 
    8656  | 2   | 5  | null 
    8656  | 1   | 6  | null 

我已经试过此查询

+2

“LEFT JOIN”不会返回预期结果的查询在哪里?请把它和桌子的结构一起放好。 –

回答

2

通过移动u.activity_id =10066LEFT JOIN而不是WHERE条款,我能够产生结果:

select t.entity_id, 
    t.parent_id, 
    t.length, 
    u.region_name 
from tree t 
left join units u 
    on t.parent_id = u.region_id 
    and u.activity_id =10066 
WHERE t.entity_id = 8656 

SQL Fiddle with Demo

+0

感谢bluefeet它工作:) –

0

试试这个:

SELECT t.entity_id, t.arent_id, t.length, A.region_name 
FROM tree t 
LEFT JOIN (SELECT region_id, region_name FROM units WHERE activity_id =10066) AS A ON t.arent_id = A.region_id 
WHERE entity_id = 8656 

OR

SELECT t. * , u.region_name 
FROM tree t 
LEFT JOIN units u ON t.parent_id = u.region_id AND u.activity_id = 10066 
WHERE t.entity_id = 8656 
0

这将是有益的如果你显示你的左连接查询..无论如何尝试这...

SELECT t.entity_id, t.parent_id, t.length, u.region_name from tree t 
    left join units u on t.parent_id = u.region_id and u.activity_id =10066 
    WHERE t.entity_id = 8656