联合2查询
问题描述:
我有两个查询,我想结合 有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我想加入此查询与上述查询。
请帮忙。我知道我不太清楚,但请问你是否不明白什么。
感谢
答
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
使用左连接,当你知道正确的表可能没有匹配的记录。追加加入到左连接过滤器旁边的任何过滤器,因为如果将它放在将删除想要检索的行的位置。
答
这是你想要的吗?
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
该用户没有policyID_fk。它在组表中。这就是我必须先加入用户和群组的原因。 – user175084 2012-03-06 00:13:54
我刚刚将group.policyID_FK = source.policyID_FK更改为policy.ID = source.policyID_FK。 – user175084 2012-03-06 00:21:00
这很好,我只是想尽早地跳到最后 - 这样连接就显示为一条线,a => b => c。我相信这是一个品味问题。 – 2012-03-06 00:36:46