MySQL视图:子连接

时间:2009-07-16 02:30:45

标签: sql mysql view

我想要一个聚合四个表中行的视图表。

第一个主要表是客户端,它只是主键唯一ID和profile_id。第二个表配置文件包含所有firstname,address,zipcode类型的信息。第三个表格是电子邮件;一个客户端对象可以有许多电子邮件对象,但只有一个电子邮件对象,其中列标记为true;第四个表是手机 - 这也是一对一的关系(可能有手机,家庭电话,传真号码......等等),只有一个对象可以拥有主要 em>列已标记。

使用个人资料表加入客户端表非常简单,因为它是一对一的;我想要的建议是如何根据主要列(而不是第一个JOINed结果)选择电子邮件和电话对象。

我可以指出的任何资源都将受到高度赞赏;因为我一直在寻找材料几天。

提前谢谢!

2 个答案:

答案 0 :(得分:1)

加入emailphone时应该没有任何问题。只需将他们加入另一个直接加入,并将WHERE phone.primary = TRUE添加为普通WHERE - 克劳斯。

以下,我认为应该这样做:

SELECT * 
  FROM client
  JOIN profile
  ON profile.client_id = client.id
  JOIN email
  ON email.client_id = client.id
  JOIN phone
  ON phone.client_id = client.id
WHERE phone.primary = TRUE AND
      email.primary = TRUE

答案 1 :(得分:0)

select whatevercolumnsyouwant
  from client
  join profile using (profile_id)
  join email on client.profile_id = email.profile_id
            and email.primary = 1
  join phone on client.profile_id = phone.profile_id
            and phone.primary = 1
where client.id = :whateverclientid

关键点是JOIN子句的ON子句可以指定几个条件(在AND,OR,无论如何),就像WHERE子句可以但具有更“特定”的目的!