首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql选择具有独占和

mysql选择具有独占和
EN

Stack Overflow用户
提问于 2013-08-30 19:16:42
回答 4查看 686关注 0票数 0

我有一个posts表和一个post_tags表--这里是我的post结构示例:

代码语言:javascript
复制
post_id      int(11)
post_user    int(11)
post_title   text
post_content longtext

这是我的post_tags结构示例:

代码语言:javascript
复制
post_id  int(11)
tag_id   int(11)

我需要的是从posts表中选择同时具有1和2的tag_id的所有帖子,我尝试了不同的连接,但没有成功。

post_tags表数据示例:

代码语言:javascript
复制
post_id  tag_id
1        1
2        1
5        2
6        1
6        2

例如,在这里,我的查询应该返回id为6的post (从post表),在示例中观察post_id of 6有tag_id 1和tag_id 2--不仅其中之一,而且两者同时存在。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-08-30 19:18:55

您可以通过聚合来完成这一任务:

代码语言:javascript
复制
select post_id
from post_tags pt
group by post_id
having sum(tag_id = 1) > 0 and
       sum(tag_id = 2) > 0;

如果您想查看来自posts的实际信息,只需加入该表即可。

编辑(一点解释):

您有一个“集内集”查询。这是一个常见的查询,我更喜欢使用聚合和having子句来解决它,因为这是最通用的方法。

having子句中的每个条件都在计算与其中一个标记匹配的行数。也就是说,sum(tag_id = 1)正在计算post_tags中的行,这是正确的。条件> 0只是说"tag_id =1至少存在于一行上“。

我之所以喜欢这种方法,是因为你可以很容易地概括它。如果您也需要标记3和4:

代码语言:javascript
复制
having sum(tag_id = 1) > 0 and
       sum(tag_id = 2) > 0 and
       sum(tag_id = 3) > 0 and
       sum(tag_id = 4) > 0;

诸若此类。

票数 2
EN

Stack Overflow用户

发布于 2013-08-30 19:29:10

试试看:

代码语言:javascript
复制
SELECT post.*
FROM (SELECT T1.post_id
      FROM (SELECT * FROM post_tags WHERE 1 IN(tag_id)) T1
      INNER JOIN (SELECT * FROM post_tags WHERE 2 IN(tag_id)) T2 ON T1.post_id = T2.post_id)
      T3
INNER JOIN post ON T3.post_id=post.post_id;

SQL链接:http://sqlfiddle.com/#!2/04f74/33

票数 0
EN

Stack Overflow用户

发布于 2013-08-30 19:30:28

这应该能行

代码语言:javascript
复制
select q.* from (
      select  p.post_id as post_id from post_tags p 
      where p.tag_id=1 
      and exists (
            select 1 from post_tags p2 
            where p2.post_id=p.post_id 
            and p2.tag_id=2)
    ) as t
    inner join  posts q on posts_id=t.post_id;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18540037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档