mysql左连接与count(在右表属性上)group by

时间:2014-08-29 09:28:15

标签: mysql

我有两个表,一个带有标签,另一个带有实际选定的文章标签(表格关系)。我想添加条件以选择当前文章的实际选定标签的数量。示例选择文章1:

--------------------------
| id | name   | selected |
--------------------------
| 0  | this   | 1        |
| 1  | is     | 0        | 
| 2  | sparta | 1        |
--------------------------

我到目前为止:

SELECT t.*, count(t.id) as `selected`
FROM tag t LEFT JOIN relation r ON t.id = r.tid
GROUP BY t.id

表格标签:

---------------
| id | name   |
---------------
| 0  | this   |
| 1  | is     |
| 2  | sparta |
---------------

表关系:

-------------
| tid | aid |
-------------
| 0   | 2   |
| 0   | 1   |
| 2   | 1   |
-------------

1 个答案:

答案 0 :(得分:1)

编辑:第一个查询返回文章的选定标签,这不是所需的行为

这是您正在寻找的查询吗?

SELECT A.id
      , COUNT(T.id) AS [nb selected tags]
FROM article A
LEFT OUTER JOIN relation R ON R.aid = A.id
LEFT OUTER JOIN tag T ON T.id = R.tid
                         AND T.selected = 1
GROUP BY A.id

希望这会对你有所帮助。

PS:如果您只想要特定文章的结果,那么您必须在WHERE之前添加GROUP BY条款。


查询返回所需数据:

SELECT T.id
     ,T.name
     , CASE
        WHEN R.tid IS NOT NULL THEN 1
        ELSE 0
      END AS [selected]
FROM tag T
LEFT OUTER JOIN relation R ON R.tid = T.id
                            AND R.selected = 1
                            AND R.aid = ...

我认为表格relation在tid和援助方面有一个独特性。

如果查询返回预期结果,请告诉我。