2012-03-05 83 views
0

我有两个查询,我想结合 有4个表链接。 用户,组,政策,来源联合2查询

第一个查询我得到的用户与各自的政策ID。

第一次查询:

Select users.ID as UserID,users.Username, 
policy.ID as PolicyID,policy.PolicyName 
from users join groups on group.ID = user.groupID_FK 
join policy on users.policyID_FK = policy.ID 

第二查询:在这里,我需要匹配policyID_FK和应用的路径。源类型应该为0,那么可能没有对该policyID_FK输入数据源类型o。

Select Path, policyID_FK from source 
WHERE SourceType = 0 and policyID_FK = 1 

在这里,而不是给policyID_FK = 1我想加入此查询与上述查询。

请帮忙。我知道我不太清楚,但请问你是否不明白什么。

感谢

回答

2
Select users.ID as UserID,users.Username, policy.ID as PolicyID,policy.PolicyName, source.Path 
from users join groups on group.ID = user.groupID_FK 
    join policy on group.policyID_FK = policy.ID 
    left join source 
     on group.policyID_FK = source.policyID_FK 
     and SourceType = 0 

使用左连接,当你知道正确的表可能没有匹配的记录。追加加入到左连接过滤器旁边的任何过滤器,因为如果将它放在将删除想要检索的行的位置。

+0

该用户没有policyID_fk。它在组表中。这就是我必须先加入用户和群组的原因。 – user175084 2012-03-06 00:13:54

+0

我刚刚将group.policyID_FK = source.policyID_FK更改为policy.ID = source.policyID_FK。 – user175084 2012-03-06 00:21:00

+0

这很好,我只是想尽早地跳到最后 - 这样连接就显示为一条线,a => b => c。我相信这是一个品味问题。 – 2012-03-06 00:36:46

1

这是你想要的吗?

Select users.ID as UserID, 
     users.Username, 
     policy.ID as PolicyID, 
     policy.PolicyName, 
     source.Path 
FROM users INNER JOIN groups 
      ON group.ID = user.groupID_FK 
     INNER JOIN policy 
      ON users.policyID_FK = policy.ID 
     INNER JOIN source 
      ON users.policyID_FK = source.policyID_FK 
-- You can add conditions here