我想要一个聚合四个表中行的视图表。
第一个主要表是客户端,它只是主键唯一ID和profile_id。第二个表配置文件包含所有firstname,address,zipcode类型的信息。第三个表格是电子邮件;一个客户端对象可以有许多电子邮件对象,但只有一个电子邮件对象,其中主列标记为true;第四个表是手机 - 这也是一对一的关系(可能有手机,家庭电话,传真号码......等等),只有一个对象可以拥有主要> em>列已标记。
使用个人资料表加入客户端表非常简单,因为它是一对一的;我想要的建议是如何根据主要列(而不是第一个JOINed结果)选择电子邮件和电话对象。
我可以指出的任何资源都将受到高度赞赏;因为我一直在寻找材料几天。
提前谢谢!
答案 0 :(得分:1)
加入email
和phone
时应该没有任何问题。只需将他们加入另一个直接加入,并将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子句可以但具有更“特定”的目的!