0

私はテーブル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"

1 人のユーザーが foobar という名前の投稿を 1 つ持っている場合、それは返されませんが、foobar という名前の postnot があるとすぐにユーザーが返されます。

SQLで「foobarという名前の投稿を1つも持っていないユーザーが欲しい」と言うにはどうすればよいですか。

4

3 に答える 3

6

試す :

SELECT *
FROM `users` u
WHERE NOT EXISTS (
    SELECT 1 
    FROM `posts` 
    WHERE title = 'foobar'
    AND user_id = u.id
)
于 2013-02-26T16:38:02.900 に答える
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
于 2013-02-26T16:39:03.240 に答える
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
于 2013-02-26T16:43:28.517 に答える