2010-10-04 225 views
1

我有一個mysql問題。我有兩張這樣的表,我需要聯合在一起。INNER JOIN DISTINCT與MySQL

表:

ID otherid2
1 | 1
2 | 1
3 | 2
4 | 2

表2:

otherid otherid2
1 | 1
2 | 1
3 | 2
4 | 2

我使用:

SELECT id,otherid FROM table INNER JOIN table2 ON table.otherid2=table2.otherid2 

這給了我:

ID otherid
1 | 1
1 | 2
2 | 1
2 | 2
3 | 3
3 | 4
4 | 3
4 | 4

正如你所看到的,我得到了id的重複,因爲在table2中不是唯一的頂點。我需要的是以某種方式讓INNER JOIN DISTINCT,我只希望結果如下。不重複。

這就是我想要的:

ID otherid
1 | 1
2 | 1
3 | 3
4 | 3

我可以用簡單的方法做到這一點嗎?

+0

根據連接中的哪些行決定放棄什麼是基礎?例如?對於Id 4,有2行,3和4的頂點。你是用什麼方法排除了第4個頂點的行,並且選擇了第3個頂點? – InSane 2010-10-04 11:18:44

+0

我不明白你如何得到3 | 3或4 | 3,除非前兩個表中沒有顯示值。另外,根據你在這裏展示的內容,我不知道你是如何得到2 | 2的。 – 2010-10-04 11:20:52

+0

嘗試使用子查詢(請參閱http://dev.mysql.com/doc/refman/5。5/EN/join.html)。不是非常優化,但非常有效。 – 2010-10-04 11:28:19

回答

7

如果你想在表2中最低的ID行,這也許應該這樣做

SELECT id, min(otherid) 
FROM table 
INNER JOIN table2 
ON table.otherid2=table2.otherid2 
GROUP BY id 
+0

謝謝!我今天一定很累.. :) – Martin 2010-10-04 11:41:04

+0

@Martin - 同意:-)當你錯過那樣的事情,它的時間回家! :-) – InSane 2010-10-04 11:42:36

+0

我完全同意,謝謝! :) – Martin 2010-10-04 11:50:19

2

在您的評論你想要最低的,那麼我會建議由一個組和一個分聚合

SELECT id, MIN(otherid) AS otherid ... GROUP BY id