2012-10-25 71 views
1

您好我有一個具有以下信息的數據庫表:表的多個外鍵連接mysql中1個foriegn關鍵

owner.primaryitowner, ([email protected]) 
owner.secondaryitowner, 
owner.primarybusinessowner, 
owner.secondarybusinessowner 
users.username (email [email protected]) 
users.displayname (e.g. Bob Smith) 

問題,是業主只存儲爲電子郵件。還有一個表,我通常

inner join users on users.username = owner.primaryitowner to get users.displayname 所以數據讀取correctly.`

我能夠做到這一點

select u.displayname 
from users u 
inner join owners o on 
    o.primaryitowner = u.username 
    or o.secondaryitowner = u.username 
    or o.primarybusinessowner = u.username 
    or o.secondarybusinessowner = u.username 

的問題是我需要有獨特的欄目並非所有合併到一列。

PS我不能改變數據庫我只是一個報告編寫者。

感謝這麼多提前

回答

3

你會想從用戶加入郵件的每一列計入所有者

SELECT u.displayname AS userName 
    , po.displayName AS PrimaryItOwnerUsernName 
    , so.displayName AS SecondaryIdOwnerUserName 
FROM users AS u 
INNER JOIN owners AS po on u.primaryitowner = po.username 
INNER JOIN owners AS so ON u.secondaryitowner = so.username 
... 
WHERE u.UserName = 'Ryan J Morse' 

當您加入到業主表(化名)多次,這可以讓你將存儲在用戶中的電子郵件更改爲您的報告所需的顯示名稱。

+0

謝謝你是一個拯救生命的人! –

0

這是否適合您的需求?當您從所有者表的角度來看它時,更容易將所有的顯示名作爲單獨的所有者記錄的獨立列來抓取。另一種方式是從同一用戶的多個所有者記錄中提取信息。如果這就是你想要的,那麼這是行不通的。

select prim_o.displayname as "Primary IT Owner", 
    sec_o.displayname as "Secondary IT Owner", 
    prim_bo.displayname as "Primary Business Owner", 
    sec_bo.displayname as "Secondary Business Owner" 
from owner o 
    inner join users prim_o (o.primaryitowner = prim_o.username) 
    inner join users sec_o (o.secondaryitowner = sec_o.username) 
    inner join users prim_bo (o.primarybusinessowner = prim_bo.username) 
    inner join users sec_bo (o.secondarybusinessowner = sec_bo.username)