2012-03-11 60 views
0

我有一個mysql查詢返回所需的數據,但沒有返回唯一的行。我如何確保只返回唯一的行?與MySQL聯合的唯一列

這裏是我的查詢

SELECT a.follow_id, a.user_id, a.following, b.donor_id, b.firstname, b.lastname, b.image 
FROM followers a 
INNER JOIN donors b ON a.user_id = b.user_id 
WHERE following = 257 

UNION DISTINCT 

SELECT a.follow_id, a.user_id, a.following, b.donor_id, b.firstname, b.lastname, b.image 
FROM followers a 
INNER JOIN donors b ON a.following = b.user_id 
WHERE a.user_id = 257 

這對於一個USER_ID返回多個結果。我如何確保結果不會被user_id加倍?

我已經嘗試了一組,但我一定是做錯了什麼,因爲我無法得到它的工作。

結果我回來

**follow_id user_id following donor_id firstname lastname** image 
13 224 257 124 Just A Donor 224.jpg 
11 257 224 124 Just A Donor 224.jpg 
9 257 222 116 Dummy Donor 222.jpg 

明白了...只是不得不按donor_id

SELECT * FROM 
(SELECT a.follow_id, a.user_id, a.following, b.donor_id, b.firstname, b.lastname, b.image 
FROM followers a 
INNER JOIN donors b ON a.user_id = b.user_id 
WHERE following = 257 

UNION DISTINCT 

SELECT a.follow_id, a.user_id, a.following, b.donor_id, b.firstname, b.lastname, b.image 
FROM followers a 
INNER JOIN donors b ON a.following = b.user_id 
WHERE a.user_id = 257) AS t 
GROUP BY donor_id 
+0

你現在說你想每個用戶ID只有一行嗎?這與你最初提出的問題(以及哪兩個人回答)不同。對於任何給定的用戶標識,查詢應該如何決定返回哪一行?例如,在你給出的結果集中,結果的兩行中的哪一行應該返回給user_id 257? – 2012-03-11 05:32:49

+0

當user_id相同(257)時,您希望顯示其他列的顯示內容(與您顯示的內容不同)。最重要的是請顯示您想要查看的**期望**輸出。謝謝! – 2012-03-11 05:33:49

+0

它應該只返回1行,每個user_id。對不起,如果我的問題不清楚。 – 2012-03-11 05:37:14

回答

0
SELECT DISTINCT a.follow_id, a.user_id, a.following, b.donor_id, b.firstname, b.lastname, b.image 
FROM followers a 
INNER JOIN donors b ON a.user_id = b.user_id 
WHERE following = 257 
+0

試試這個...... – Teja 2012-03-11 05:22:31

+0

不是。還是行不通。 – 2012-03-11 05:25:32

+0

很確定它需要按user_id – 2012-03-11 05:26:02

0

你試試這個?

SELECT a.follow_id, a.user_id, a.following, b.donor_id, b.firstname, b.lastname, b.image 
FROM followers a 
INNER JOIN donors b ON a.user_id = b.user_id 
WHERE following = 257 or a.user_id = 257 

如果在查詢的每一半內行不是唯一的,也可以嘗試SELECT DISTINCT。

+0

試過了,沒有返回正確的結果。 – 2012-03-11 05:28:57