我有两个表,一个带有标签,另一个带有实际选定的文章标签(表格关系)。我想添加条件以选择当前文章的实际选定标签的数量。示例选择文章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 |
-------------
答案 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和援助方面有一个独特性。
如果查询返回预期结果,请告诉我。