2012-03-11 22 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