Sql server 当我在视图上运行查询时,我在sql server中得到了两条唯一id的记录
在SqlServer Member和MemberAddress中有两个表,通过执行以下查询生成一个视图vw_成员Sql server 当我在视图上运行查询时,我在sql server中得到了两条唯一id的记录,sql-server,Sql Server,在SqlServer Member和MemberAddress中有两个表,通过执行以下查询生成一个视图vw_成员 SELECT m.MemberId, m.MemberName, m.EndCustomer, m.ExpirationDate, ma.DEA, ma.HIN, ma.Address1, ma.Address2, ma.City, ma.State, ma.OfficeConta
SELECT
m.MemberId,
m.MemberName,
m.EndCustomer,
m.ExpirationDate,
ma.DEA,
ma.HIN,
ma.Address1,
ma.Address2,
ma.City,
ma.State,
ma.OfficeContact,
ma.OfficeContactTitle,
ma.OfficeContactEmail
FROM dbo.Member m
INNER JOIN dbo.MemberAddress ma ON (m.MemberId = ma.MemberId)
但问题是,我正在为唯一MemberId生成两条记录
有人能告诉我我做错了什么吗 Wild guess-在
MemberAddress
中有两行具有相同的MemberId
。也许里面有一些地址类型的概念模型?如果是这样,您需要决定哪些地址类型应该包含在此视图中,或者如果您总是需要地址,则需要决定如何对地址类型进行优先级排序
第二,FROM子句可能类似于:
FROM
dbo.Member m
INNER JOIN
dbo.MemberAddress ma
ON
m.MemberId = ma.MemberId
LEFT JOIN
dbo.MemberAddress ma_anti
ON
m.MemberId = ma_anti.MemberId and
ma_anti.AddressType > ma.AddressType --priority decision
WHERE
ma_anti.MemberId is null
如果与ma_anti
的连接试图从MemberAddress
中找到一个比从ma
中选择的行“更好”的行-如果连接成功,您不希望该行出现在最终结果集中,因此Where
子句就是这样做的。- 双成员ID行是否为有效值?
- 一个会员能有更多的地址吗
- 行内容是否有差异
使数据符合模式
- dbo.Member.MemberId应该是主键
- dbo dbo.MemberAddress.MemberId应该是映射到Member.MemberId的外键