запрос левого соединения не возвращает ожидаемый результат

У меня есть два запроса 1) дерево и 2) единицы

первый запрос

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

Я пробовал этот запрос

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

person Pragnesh Chauhan    schedule 29.11.2012    source источник
comment
Где ваш запрос с LEFT JOIN, который не возвращает ожидаемого результата? разместите его, пожалуйста, со структурой таблиц.   -  person Mahmoud Gamal    schedule 29.11.2012


Ответы (3)


Переместив u.activity_id =10066 в LEFT 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 с демонстрацией.

person Taryn    schedule 29.11.2012

Попробуй это:

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 

ИЛИ

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
person Saharsh Shah    schedule 29.11.2012

Будет полезно, если вы покажете свой левый запрос на соединение.. в любом случае попробуйте это...

    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 
person Ayyappan Sekar    schedule 29.11.2012