加入两个表问题8

时间:2014-02-13 12:24:47

标签: mysql sql

我对此加入有问题......

这是我的2个表,adds和adds_filters

adds_filters structure:

addfilterid
addid
filterid

  data the table look like this:
  addfilterid     addid     filterid    
  1               31        65
  2               31        158
  3               32        109
  4               32        145 



adds structure

addid
addtitle
addtext



 data the table look like this:
 addid    addtitle     addtext
 31       test         test
 32       test2        test2  

一个添加可以有很多过滤器。我想获取adds_filters中的所有过滤器并显示表添加的结果。 我有以下查询...

SELECT * , af.filterid, af.addid
FROM `adds` AS a
INNER JOIN `adds_filters` AS af ON a.addid = af.addid
LIMIT 0 , 30

在表中添加,我有9条记录。上面的查询返回11个结果。我想获得9条记录,如果一条添加有多个过滤器,则显示在同一行...我可以这样做吗?

问候,约翰

3 个答案:

答案 0 :(得分:1)

使用

SELECT a.* , GROUP_CONCAT(DISTINCT af.filterid)
FROM `adds` AS a
JOIN `adds_filters` AS af ON a.addid = af.addid
GROUP BY a.addid
LIMIT 0 , 30

答案 1 :(得分:1)

查看您的查询11个记录似乎是正确的结果,因为一个添加有多个过滤器。 因此,如果每个添加至少有一个过滤器,其中一些有两个或更多,结果将超过9行。

这是我的解释,但也许你想完成别的事情?

我的问题为什么你期望9行?

答案 2 :(得分:0)

你可以试试这个。

也许它接近你的意愿。

TRANSFORM Count(adds_filters.filterId) AS sumOffilterId
SELECT adds.addid, adds.addtitle, adds.addtext
FROM adds INNER JOIN adds_filters ON adds.addid = adds_filters.addid
GROUP BY adds.addid, adds.addtitle, adds.addtext
PIVOT adds_filters.filterId;

addid addtitle addtext 65 109 145 158

31测试1 1

32 test2 test2 1 1