选择没有名为foobar的帖子的用户

时间:2013-02-26 16:35:38

标签: mysql sql join

我有一张表user和一张表post。它是一个N-1关系,意味着关系是通过post.user_id完成的。

我想找到没有帖子名为“foobar”的用户。我试过这个:

SELECT `users`.* FROM `users` 
INNER JOIN `posts` ON `posts`.`user_id` = `users`.`id`
WHERE post.title !="foobar"

如果一个用户有一个名为foobar的帖子,则不会返回,但只要有一个名为foobar的帖子,就会返回该用户。

在sql中如何说“我希望没有一个帖子的用户名为foobar”。

3 个答案:

答案 0 :(得分:6)

尝试:

SELECT *
FROM `users` u
WHERE NOT EXISTS (
    SELECT 1 
    FROM `posts` 
    WHERE title = 'foobar'
    AND user_id = u.id
)

答案 1 :(得分:0)

你可以在标题为foobar的帖子上保持联接,然后返回标题为null的所有行(没有可能的连接)。

SELECT `users`.* FROM `users` 
    LEFT JOIN `posts` ON `posts`.`user_id` = `users`.`id`
        AND posts.title = "foobar"
WHERE posts.title IS NULL

答案 2 :(得分:0)

我对这些类型的查询的偏好是使用聚合和having

SELECT `users`.*
FROM `users` 
INNER JOIN `posts` ON `posts`.`user_id` = `users`.`id`
group by users.user_id
having sum(case when post.title = 'foobar' then 1 else 0 end) = 0