2015-05-06 250 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解決方案可能會執行此操作。)