SQL查询由多个但预定的帐户创作的帖子

时间:2018-09-30 14:01:19

标签: sql

我有2张桌子; 'posts'和'post_authors'。在post_authors中,多个帐户可以在一个帖子上进行协作。我在考虑一种搜索帖子的方式时遇到了麻烦,该帖子由用户输入指定多个帐户协作。

例如,我想查找Jane Doe和John Doe合作的所有帖子,即使这些帖子中还有其他合作者。

我当前的查询...

SELECT posts.ID
FROM posts
INNER JOIN post_authors author
    ON ( posts.ID = author.post_id AND author.user_id IN ( '144', '6' ) )
WHERE posts.status = 'publish'

此查询检索两个帐户中的任何一个都附有的所有帖子。

2 个答案:

答案 0 :(得分:1)

一种方法使用聚合:

SELECT p.ID
FROM posts p
INNER JOIN post_authors pa
    ON p.ID = pa.post_id
WHERE pa.user_id IN ( '144', '6' ) AND
      p.status = 'publish'
GROUP BY p.ID
HAVING MIN(pa.user_id) <> MAX(pa.user_id);

此查询的工作方式是,针对每个帖子ID,仅限制用户1446的记录。然后,它通过HAVING子句断言,每个匹配的帖子ID组都有这两个用户。

请注意,我将表别名更改为比实际表名短的名称。

答案 1 :(得分:1)

您可以使用group byhaving

SELECT p.ID
FROM posts p INNER JOIN
     post_authors pa
     ON p.ID = pa.post_id 
WHERE pa.user_id IN ( '144', '6' ) and p.status = 'publish'
GROUP BY p.ID
HAVING COUNT(DISTINCT pa.user_id) = 2;  -- number of items in list

post_id可能是数字。如果是这样,请除去单引号。混合数据类型会使优化器感到困惑。

请注意,我使用的表别名是表名称的缩写。较短的表别名更易于编写和阅读。