0
我有兩個表,我試圖加入爲第三個表生成一組獨特的數據,但遇到麻煩做得很好。如何連接兩個表格,每邊都有不同的列?
- 的
left
表具有id
字段,以及一個公共連接字段(a
)。 - 的
right
表具有共同連接字段(a
),而另一個不同的領域(b
)
我試圖提取結果集的id
和b
,那裏既沒有id
也不b
被複制。
我有一個SQL小提琴設置:http://www.sqlfiddle.com/#!9/208de/3/0
理想的結果應該是:
id | b
---+---
1 | 1
2 | 2
3 | 3
每個id
和b
值只出現一次(這只是他們在這裏匹配的巧合,這是不能總是假設)。
謝謝
有什麼可疑的。請查看http://www.w3schools.com/sql/trysql.asp?filename=trysql_select_distinct並嘗試以下查詢:SELECT DISTINCT City,Country FROM Customers; ' – Bramastic
它們在您的SQLFiddle中不匹配。如果你通過'a'加入,你最終會交叉加入。所以'id'中的每個值都與'b'中的每個值相加。此外,在你的sqlFiddle中,你有一個GROUP BY,但你只在其中包含'id'。這是一場災難。 MySQl會選擇它爲每個不同的'id'找到的第一個'b'值,這肯定是壞的和錯誤的,令人厭惡,我不喜歡MySQl,因爲它允許這樣的事情。 – JNevill
只需詳細說明,您在'a'上的連接將從'left'獲取第一條記錄,然後將'1'的'a'值匹配到'right'中每個'a'爲'1'的記錄。這是三個記錄。然後,它將移動到'left'中的下一個記錄,其中'a'又是'1',它將再次在'right'中找到三個匹配的記錄,其中'a'爲'1'。然後再次爲第三條記錄。您的結果集將包含9條記錄。你最終得到一個笛卡爾產品([sqlfiddle](http://www.sqlfiddle.com/#!9/208de/44))。用什麼邏輯從這9條記錄到你想要的輸出中的3條記錄? – JNevill