0

当存在要导入联接表中的哪些行的附加条件时,我无法确定如何进行联接。

会员

id|name

联系人

id|name

会员联系方式

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 即 m.id = 2 的第一种情况,这不是我想要的。

谁能建议正确的方法来做到这一点?谢谢你。

4

1 回答 1

2

您的查询正在使用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 joininner 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;
于 2013-09-13T12:07:39.817 回答