mysql - 如何从SQL中的表连接中删除重复项

标签 mysql sql

我已经为客户建立了一个小目录网站。

对于这个问题,我们至少需要知道这两个:

   TABLE: places                       TABLE: tags

   | pid | name    | lat  | lng  |     | tid | pid | value |
   -------------------------------     ---------------------
   |  1  | Place 1 | x.xx | x.xx |     |  0  |  2  | tag1
   |  2  | Place 2 | x.xx | x.xx |  +  |  1  |  2  | tag2
   |  3  | Place 3 | x.xx | x.xx |     |  2  |  1  | tag1

...我想得到更多这样的东西

   | pid | name    | lat  | lng  | value      |
   --------------------------------------------
   |  2  | Place 2 | x.xx | x.xx | tag1, tag2 | <3    
   |  1  | Place 1 | x.xx | x.xx | tag1       |  

... 而不是这样的(那是一个连接)

   | pid | name    | lat  | lng  | value      |
   --------------------------------------------
   |  2  | Place 2 | x.xx | x.xx | tag1       | 
   |  2  | Place 2 | x.xx | x.xx | tag2       |              
   |  1  | Place 1 | x.xx | x.xx | tag1       |     

是否可以像上面那样用纯 SQL 合并不同的标签?

最佳答案

加入表格后,您只需要 GROUP_CONCAT

select p.pid,p.name,p.lat,p.long,group_concat(t.value) as value
from places p
join tags t on p.pid=t.pid
group by p.pid,p.name,p.lat,p.long

关于mysql - 如何从SQL中的表连接中删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42238445/

相关文章:

php - 线程消息系统的查询不起作用(基于其他成员的帖子)

mysql子查询限制也限制父查询

mysql - Win64编译包源码: "sorry, unimplemented: 64 bit mode not compiled in"

mysql - 在 MySQL 数据库中存储日期时间

mysql - 使用 CROSS JOIN 将两个表合并到现有的第三个表中 -

mysql - 使用 order by 而不改变组的顺序

mysql合并两个varchar列删除重复的单词

mysql - 不能 UNION ALL 两个等价的查询吗?

sql - SQL Server 中的“<>”不返回 NULL 值行

sql - 获取同一表中的公共(public)行