[英]Join three tables in mySQL?
我有三个这样的表:
人
id | name | location
-----------------------
1 | ABC | Location1
2 | XYZ | Location2
联系
id | type | contact
---------------------------
1 | website | abc.com
2 | email | abc@abc.com
3 | website | xyz.com
4 | email | xyz@xyz.com
PersonContact
Person_id | Contact_id
-----------------------
1 | 1
1 | 2
2 | 3
2 | 4
我想得到这样的结果:
id | name | website | email
----------------------------------
1 | ABC | abc.com | abc@abc.com
2 | XYZ | xyz.com | xyz@xyz.com
有几种方法可以做到这一点,但这是一个简单的MySQL
SELECT
p.id,
p.name,
MAX(IF(c.type = 'website', c.contact, NULL)) AS 'website',
MAX(IF(c.type = 'email', c.contact, NULL)) AS 'email'
FROM
Person p INNER JOIN
PersonContact pc ON p.id = pc.Person_ID INNER JOIN
Contact c ON pc.contact_id = c.id
GROUP BY p.id
有趣的是,如果不使用if语句,查询会有多复杂。 它实际上是每列一个左连接! 干得好!@Ben!
select p.id, p.name, max(website) as website, max(email) as email from person p
join personContact pc on p.id = pc.person_id
join contact c on pc.contact_id = c.id
left join (
select c.id as cid, c.contact as website from personContact pc
join contact c on pc.contact_id = c.id
where c.type = 'website'
) as WebsiteCol
on c.id = WebsiteCol.cid
left join (
select c.id as cid, c.contact as email from personContact pc
join contact c on pc.contact_id = c.id
where c.type = 'email'
) as EmailCol
on c.id = EmailCol.cid
group by p.id, p.name
SELECT p.id, p.name, c.contact FROM Person p, PersonContact pc , Contact c WHERE p.id = pc.Person_id AND pc.Contact_id= c.id
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.