2017-04-08 11 views
1

有文字的表,并希望得到具有相同的文字,像所有的记录:MySQL的:我如何“名单”中记载有等于文本列

SELECT t1.id, t2.id FROM table AS t1 
    LEFT JOIN table AS t2 ON (t1.txt = t2.txt AND t1.id != t2.id); 

能正常工作至今。问题是文本可能会出现两次以上。在上面的语句中,我得到(如果id为1,2和3具有相同的TXT):

1 2 
1 3 
2 1 
2 3 
3 1 
3 2 

这将是马丽娟得到的东西,如:

1 2|3 
2 1|3 
3 1|2 

最好将得不到双打,但我想如果可能的话它可能是一个非常缓慢的查询:

1 2|3 

不知道如何在mysql中直接实现这一目标?

+0

你能提供样品的数据和预期的结果基于该数据? –

回答

2

你可以得到使用GROUP BYGROUP_CONCAT()您想要的结果:

SELECT t1.id, GROUP_CONCAT(t2.id SEPARATOR '|') 
FROM table t1 LEFT JOIN 
    table t2 
    ON t1.txt = t2.txt AND t1.id <> t2.id 
GROUP BY t1.id; 
+0

作品,非常感谢! – Werner

2

可以使用group_concat拿到第一预期输出:

select t1.id, 
    group_concat(t2.id separator '|') 
from table as t1 
left join table as t2 on (
     t1.txt = t2.txt 
     and t1.id != t2.id 
     ) 
group by t1.id; 
+0

作品,非常感谢! – Werner

相关问题