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

时间:2017-02-14 23:57:47

标签: 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合并?

3 个答案:

答案 0 :(得分:2)

加入表格后,您只需要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

答案 1 :(得分:1)

您只需要group bygroup_concat()。但是,因为您需要places中的所有列,所以我会使用子查询:

select p.*,
       (select group_concat(t.value)
        from tags t
        where t.pid = p.pid
       ) as `values`
from places p;

答案 2 :(得分:0)

使用内部联接

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