2015-05-06 196 views
3

我知道这是一个相当简单的问题,但是自从我看了SQL.I其已经多年在包含信息的两个表..SQL多个内部连接两个表

表业务合作伙伴之间

Partner 
1 
2 
3 

并表业务关系

RelationshipNum Partner1 Partner2 Relationshiptype 
000001   1  2  OCDL 

我的查询应该对合作伙伴1和合作伙伴2的值和搜索业务合作伙伴的合作领域。如果业务关系中同一条目上的两个值都存在,则业务关系中的整个行应返回。如果只有一个或不存在,我们可以忽略它。

这是我迄今为止,但它没有返回值,我已经在Excel中测试了数据集(太大而不能成为一个可行的选项),并且绝对有匹配。

SELECT [Business Relationships].* 
FROM [Business Relationships] 
INNER JOIN [Business Partners] ON ([Business Partners].Partner = [Business Relationships].Partner1) 
           AND ([Business Partners].Partner = [Business Relationships].Partner2); 
+0

假设您试图识别BusinessObartners表中未定义关系表中业务合作伙伴ID的记录,则可能需要考虑创建外键关系之间的表,从而强制执行此。 – StevieG

回答

4

两个INNER JOIN尝试如下

SELECT BR.* 
FROM ([Business Relationships] BR 
INNER JOIN [Business Partners] BP1 ON BP1.[Partner] = BR.[Partner1]) 
INNER JOIN [Business Partners] BP2 ON BP2.[Partner] = BR.[Partner2] 
+0

感谢您的快速响应,但我在查询表达式'BP1.Partner = BR.Partner1 INNER JOIN [Business Partners] BP2 ON BP2.Partner = BR.Partner2“中遇到了”语法错误(缺少运算符)“运行查询。 – Quinn

+0

@Quinn看起来不错。我想知道为什么你有这个错误。 – Parado

+0

@Quinn我加了括号现在就试试吧。 – Parado

1

使用双EXISTS找到返回行:

SELECT BR.* 
FROM [Business Relationships] BR 
WHERE EXISTS (select 1 from [Business Partners] where Partner = BR.Partner1) 
    AND EXISTS (select 1 from [Business Partners] where Partner = BR.Partner2) 

不会返回任何重复! (根据数据,哪些JOIN解决方案可能会执行此操作。)