在连接表中要导入哪些行的附加条件时,无法确定如何进行连接。
成员
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即m.id = 2,这不是我想要的。
有人能建议这样做的正确方法吗?谢谢。
答案 0 :(得分: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;