我有个问题,我真的不知道怎么解决它。因此,我有很多到很多关系模型,有以下表格:‘post’、‘tag’、‘post_ to _tag’。假设我想让所有的帖子都有标签,从's‘和't’开始。我使用以下查询:
SELECT DISTINCT o.id
FROM posts o
JOIN posts_to_tags ot ON o.id = ot.post_id
JOIN tags t ON ot.tag_id = t.id
WHERE t.name REGEXP '^s|^t'
GROUP BY o.id
HAVING COUNT(o.id) = 2这在大多数情况下都很好,但并不总是如此。例如,如果有一个具有以下标记的帖子: smee,starting,lala,即使没有以t开头的标记(从‘s’开始有2个标记),查询也会成功。在这里,帖子也应该有一个标签,以“t”开头。有人知道怎么解决这个问题吗?我希望我把问题弄清楚了。
提前谢谢你。
发布于 2014-01-21 20:42:07
你希望所有的帖子都有一个以's‘开头的标签,另一个以't’开头的帖子。您需要更改having子句:
SELECT o.id
FROM posts o
JOIN posts_to_tags ot ON o.id = ot.post_id
JOIN tags t ON ot.tag_id = t.id
WHERE t.name REGEXP '^s|^t'
GROUP BY o.id
HAVING count(distinct left(t.name, 1)) = 2;而且,在使用select distinct时不需要group by。
https://stackoverflow.com/questions/21268359
复制相似问题