sql选择使用like或regexp的标签

时间:2014-01-21 20:24:22

标签: sql regex filter tags

我遇到了一个问题,我真的不知道如何修复它。所以我有一个多对多关系模型与下表:'posts','tags','posts_to_tags'。 假设我希望所有帖子都有以'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,smooth,lala 即使没有以't'开头的标签(有2个标签以's'开头),查询也会成功。这里的帖子也应该有一个以't'开头的标签。 有没有人有任何关于如何解决这个问题的提示? 我希望我能清楚地理解这个问题。

提前谢谢。

1 个答案:

答案 0 :(得分:0)

您希望所有帖子的标签以“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

相关问题