我正在处理在特定条件下从多个表中绘制数据的查询。结果集中的列必须包含1-3类地址的值。这是一个典型的1个赞助人到1,3个赞助人地址关系。基于其他值从多行中选择相同的列
我的结果集中需要三个地址块。 (这是一个系统转换从ILS到另一个在我们的学术图书馆。)
每个人,从我所知道的,有ADDRESS_TYPE='1'
在PATRON_ADDRESS
表中的行,这是一个街道地址
一些也有一个Address_Type = '2'
,这有时只是一个campusmailbox
号码,有时是一个真实地址
大多数有一个Address_Type = '3'
,这是电子邮件地址。 是的,我同意。这是源系统中糟糕的数据库设计。
我有这样一个数据结构,我需要填充:
PATRON name, primary address street city state zip (Address_type 1), secondary address street city state zip (Address_Type 2) and an email field.
注意,而底层的数据库是Oracle,在我目前的角色,我只能通过MS Access 2007中访问数据(bleah!)。所以我可能知道我可以在Oracle中做的事情,我认为它不适用于Access SQL。
因此,我需要从patron_id
字段的同一表中抽取行,PATRON_ADDRESS
。低于
此查询对于每一个patron_ID
和address_type
在Patron
表,我需要从Patron_Address
表有条件地选择列值。这个查询是做我需要的吗?
Select P.PATRON.P.PATRON_ID,P.PATRON.LAST_NAME,
A1.StrretAddress_line1,A1.StreetAddress_Line2,etc.,A2.StreetAddress_Line1, A2.StreetAddress_Line2, A3.StreetAddress_Line1
from PATRON P, PATRON_ADDRESS A1, PATRON_ADDRESS A2, PATRON_ADDRESS A3
where (P.PATRON_ID = A1.PATRON_ID and
A1.ADDRESS_TYPE = '1')
and
(P.PATRON_ID = A2.PATRON_ID and
A2.ADDRESS_TYPE = '2')
and
(P.PATRON_ID = A3.PATRON_ID and
A3.ADDRESS_TYPE = '3');
我意识到,这将是相当低效的,但我不知道我怎么会参考各个列,如果我做了一个内部联接的PATRON_ADDRESS
为address type = 1
数据,以及PATRON_ADDRESS
涉及两个外连接来获得分别为address type = 2
和address_type = 3
数据。谢谢。
你能澄清你的数据结构吗? “PATRON名称,主要地址街道城市州邮政编码(Address_type 1),次要地址街道城市州邮政编码(Address_Type 2)和一个电子邮件字段。”那是4场?此外,您是否可以展示几行示例数据和您期望的结果。 – JNevill