[英]select same column from multiple rows based on other values
我正在研究一個查詢,該查詢在某些條件下從多個表中提取數據。 結果集中的列必須包含1-3種地址類型的值。 這是一個典型的1 Patron到1,3 Patron Address關系。
我的結果集中需要三個地址塊。 (這是為了將系統從ILS轉換到我們的學術圖書館中的另一個庫。)
據我所知,每個人在PATRON_ADDRESS
表中PATRON_ADDRESS
ADDRESS_TYPE='1'
,這是街道地址
有些還具有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訪問數據(麻煩!)。 因此,我可能知道我可以在Oracle中做的事情,我認為在Access SQL中無法使用。
因此,我需要根據patron_id
字段從同一表PATRON_ADDRESS
拉出行。 這是下面的查詢嗎
對於Patron
表中的每個patron_ID
和address_type
,我需要有條件地從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
數據。 謝謝。
您應該只需要為每個地址JOIN
表即可。 它與您所擁有的非常相似,但是您實際上應該使用JOIN
語法,而不是在FROM
子句中列出所有表。 這種JOIN
表的形式尚不清楚,無法完成JOIN
子句可以完成的工作,並且已經(已經被淘汰)了20年。
SELECT
P.patron_id,
P.last_name,
PA1.streetaddress_line1,
...
PA2.streetaddress_line2,
...
PA3.streetaddress_line3
FROM
Patron P
LEFT OUTER JOIN Patron_Address PA1 ON
PA1.patron_id = P.patron_id AND
PA1.address_type = '1'
LEFT OUTER JOIN Patron_Address PA2 ON
PA2.patron_id = P.patron_id AND
PA2.address_type = '2'
LEFT OUTER JOIN Patron_Address PA3 ON
PA3.patron_id = P.patron_id AND
PA3.address_type = '3'
如果您知道每個人的地址類型均為1,則可以將其INNER JOIN
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.