-1

标签

tag_id      tag          post_id 
--------------------------------
1           category1    1
2           category2    1
3           etc          2
4           category3    1

邮政

post_id title
-------------
1       title1

我们怎么能得到title1,因为它在标签category1&&category2

就像是

SELECT TITLE 
  FROM post, tag 
 WHERE tag.post_id = post.post_id 
   AND tags.tag = 'category1','category2'
4

2 回答 2

3

为了检查标题是否同时具有“category1”和“category2”,您可以使用以下 SQL 查询:

SELECT title 
FROM post 
JOIN tag ON post.post_id = tag.post_id 
WHERE tag.tag_id IN (SELECT tag_id FROM tag WHERE tag = 'category1')
AND tag.tag = 'category2';

要检查其他类别,您只需重复 WHERE 子句:

SELECT title 
FROM post 
JOIN tag ON post.post_id = tag.post_id 
WHERE tag.tag_id IN (SELECT tag_id FROM tag WHERE tag = 'category1')
AND tag.tag_id IN (SELECT tag_id FROM tag WHERE tag = 'category2')
AND tag.tag = 'category3';

这将返回包含所有 3 个类别的标题的结果。

于 2012-11-10T05:28:21.020 回答
1

您可以像这样加入两个表:

SELECT post.* 
FROM post 
LEFT JOIN tag
ON post.post_id = tag.post_id
WHERE tag.tag IN ('category1','category2')
GROUP BY post.post_id
HAVING COUNT(post.post_id) >1;

看到这个 SQLFiddle

注意:如果我们不使用HAVING子句,它也会返回任何单个值存在的记录

看到这个 SQLFiddle

请参阅具有类似表结构的类似要求。

于 2012-11-10T06:50:21.493 回答