2013-09-13 4 views
0

У меня возникли проблемы с настройкой соединения, когда есть дополнительное условие, по которому строки в объединенной таблице импортируются.Как присоединиться к столам с дополнительным условием

члены

id|name 

контакты

id|name 

membercontact

id|memberid|contactid|myid 

1|1|33|2 
2|1|34|3 

SELECT m.*,c.*,cm.* 
FROM `members` m 
LEFT JOIN `contacts`c 
    ON c.memberid = m.id 
LEFT JOIN `membercontact` mc 
    ON m.id = mc.memberid AND mc.myid ='3' 
WHERE m.id = '2' 
GROUP BY m.id 

не работает. С другой стороны, если я удалю условие mc.myid = 3, он вернет первый случай, когда m.id = mc.memberid ie m.id = 2, чего я не хочу.

Может ли кто-нибудь предложить правильный способ сделать это? Спасибо.

+0

Похоже 'membercontact' разлагает отношения между членами и контактами - но ты их непосредственно соединены в этом запросе? – symcbean

ответ

1

Ваш запрос с использованием left join:

SELECT m.*,c.*,cm.* 
FROM `members` m LEFT JOIN 
    `contacts`c 
     ON c.memberid = m.id LEFT JOIN 
    `membercontact` mc 
     ON m.id = mc.memberid AND mc.myid ='3' 
WHERE m.id = '2' 
GROUP BY m.id; 

Он собирается вернуть все членов, потому что это, как left join работает. Если вы хотите, чтобы отфильтровать вещи, изменить left join к inner join:

SELECT m.*,c.*,cm.* 
FROM `members` m INNER JOIN 
    `contacts`c 
     ON c.memberid = m.id INNER JOIN 
    `membercontact` mc 
     ON m.id = mc.memberid AND mc.myid ='3' 
WHERE m.id = '2' 
GROUP BY m.id; 
Смежные вопросы