簡體   English   中英

根據其他值從多行中選擇同一列

[英]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_IDaddress_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_ADDRESSaddress type = 1的數據,和兩個外部連接PATRON_ADDRESS獲得address type = 2address_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM