簡體   English   中英

聯接表而不刪除行

[英]Join tables without dropping rows

我有一個表(地址),如下所述:

在此處輸入圖片說明

我想為每個用戶選擇所有數據作為一行。 我嘗試了左連接,效果很好。 例如

select A.Address as permaddress, B.Address as mailaddress from Addresses A left join  Addresses B on A.userId = B.userId and B.address_type = 'mail' where A.address_type = 'perm' and A.userId = '987654321'.

當我將其擴展到2個具有address_type ='camp'的左連接時,它不起作用。 例如

select A.Address as permaddress, B.Address as mailaddress, C.Address as campaddress from Addresses A left join  Addresses B on A.userId = B.userId and B.address_type = 'mail'
left join Addresses C on A.userId = C.userId and C.address_type = 'camp'
 where A.address_type = 'perm' and A.userId = '987654321'.

我不想做一個簡單的聯接,因為如果某人沒有其他address_types,它將刪除行。 問題是每個人都有address_type ='perm'。 例如:

select A.Address as permaddress, B.Address as mailaddress from Addresses A, Addresses B  where A.userId = B.userId and B.address_type = 'mail' and A.address_type = 'perm' and A.userId = '987654321'.

不知道是否應該讓我不參加相同的表,還是應該只使用代碼選擇幾次。 例如

select A.Address as permaddress from  from Addresses A where A.address_type = 'perm' and A.userId = '987654321'

然后做

select B.Address as mailaddress from  from Addresses B where B.address_type = 'mail' and B.userId = '987654321'

然后使用代碼合並結果

任何幫助將不勝感激。 謝謝。

使用左聯接時,將顯示所有結果,無論它們是否具有mailaddress或campaddress的值。

select    A.Address as permaddress, B.Address as mailaddress, C.Address as campaddress
from      Addresses A 
left join Addresses B on A.userId = B.userId and B.address_type = 'mail' 
left join Addresses C on A.userId = C.userId and C.address_type = 'camp' 

where     A.address_type = 'perm' 
  and     A.userId = '987654321'

您可以使用PIVOT實現此目的。

不習慣Oracle語法,但這應該可以解決問題。

SELECT *
FROM   (SELECT userid, address_type, address from Addresses)
PIVOT  (MAX(address) AS address FOR (address_type) IN ('perm', 'mail', 'camp'));

甲骨文

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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