2013-06-25 3 views
1

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

name | map_id | reg_id 
abc | 1  | 5 
pqr | 2  | 5 
xyz | 3  | 5 

table2:

map_id | map_name | is_deleted 
1  | map1  | 0 
2  | map2  | 0 

мой SQL запрос:

SELECT * 
FROM table1 t1 
     LEFT JOIN table2 t2 
       ON t1.map_id = t2.map_id 
WHERE t1.reg_id = 5 
     AND t2.is_deleted = 0 

, что приведенный выше запрос делает меня останавливает от получение записи с map_id = 3 в таблице 1.

Как я могу достичь этого, а также 'is_deleted check', если запись существует в таблице2.

благодарит заранее.

ответ

3

Вы должны переместить is_deleted чек на JOIN:

select t1.name, t1.map_id, t1.reg_id, -- replace select * with columns 
    t2.map_name, t2.is_deleted 
from table1 t1 
left join table2 t2 
    on t1.map_id = t2.map_id 
    and t2.is_deleted = 0 
WHERE t1.reg_id = 5; 

См SQL Fiddle with Demo. Ваш текущий запрос вызывает то, что LEFT JOIN действует как INNER JOIN, потому что у вас есть is_deleted как часть предложения WHERE. Если вы переместите это в JOIN, вы вернете строки из table2, у которых есть is_deleted=0, и вы все равно вернете все строки из table1, где reg_id=5.

+0

спасибо, что ответ, похоже, это сработает. Я реализую это в своем приложении и проверю. – jospratik

+0

Да, потому что предложение 'и t2.is_deleted = 0' убивало запись map_id = 3. Левое объединение включало эту запись, но 't2.is_deleted' было нулевым. Перемещение этого условия в условие соединения - правильный способ сделать это. – criticalfix