2012-10-25 69 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)