我有一个包含文本的表格,想要获取所有具有相同文本的记录,例如:
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 BY
和GROUP_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;
答案 1 :(得分: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;