繁体   English   中英

在mySQL中加入三个表?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM