选择表的一行,以及另一个表中的所有行

时间:2017-07-06 12:38:38

标签: mysql sql

如果我有这两个表:

[    id    -     title    -     content    ]
[    1    -     title1    -     content1   ]
[    2    -     title2    -     content2   ]

[    id    -     pid    -       tags   ]
[    1    -       1    -        TAG1   ]
[    2    -       1    -        TAG2   ]
[    3    -       1    -        TAG3   ]
[    4    -       2    -        TAG2   ]

现在我要做的是从title中选择contenttable1,然后从tags table2中选择b.pid = a.id SELECT a.title, a.content, b.tags FROM table1 a LEFT JOIN table2 b ON a.id = b.pid WHERE a.id = 1

所以我的查询是

title1
content1
TAG1 TAG2 TAG3

我想得到的是

TAG1

但我得到的只是title1 content1,每个标记的重复值为SELECT a.title, a.content, (SELECT DISTINCT b.tags) FROM table1 a LEFT JOIN table2 b WHERE a.id = 1

然后我试了

LDR

但仍未按预期工作。

1 个答案:

答案 0 :(得分:2)

为了在同一行上输入与id相关的标签,你可以使用group_concat

  select  a.title, a.content, group_concat(b.tags)
  from table1 a LEFT JOIN table2 b ON a.id = b.pid
  WHERE a.id = 1
  group by  a.title, a.content

你也可以对同一个查询使用计数

  select  a.title, a.content, group_concat(b.tags), count(*)
  from table1 a LEFT JOIN table2 b ON a.id = b.pid
  WHERE a.id = 1
  group by  a.title, a.content

对于不同的tas,你可以使用

 select  a.title, a.content, group_concat(distinct b.tags)
  from table1 a LEFT JOIN table2 b ON a.id = b.pid
  WHERE a.id = 1
  group by  a.title, a.content