teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

3

Tweak

2021/04/22 10:49

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -30,7 +30,7 @@
30
30
  | 3 | 2021-04-22 09:11:59 | 2021-04-22 09:11:59 |
31
31
  +----+---------------------+---------------------+
32
32
  ```
33
- 上記の条件のもと、user_idが2のpostを除いたposts一覧を取得したい(上記の条件だとPostID=1のものだけが帰ってきて欲しい)のですがいい方法が思い付かず、もしわかる方がいらっしゃいましたら教えていただきたいです。
33
+ 上記の条件のもと、user_posts.user_idが2のpostを除いたposts一覧を取得したい(上記の条件だとPostID=1のものだけが帰ってきて欲しい)のですがいい方法が思い付かず、もしわかる方がいらっしゃいましたら教えていただきたいです。
34
34
 
35
35
  ### 追記
36
36
  当初 `select * from posts inner join user_posts on posts.id = user_posts.post_id where not user_posts.user_id = 2;`というクエリで取得できると思っていたのですが、これだと以下のような問題点があり意図したものが取得できませんでした

2

Tweak

2021/04/22 10:49

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -1,4 +1,4 @@
1
- このようなデータが入っているとします
1
+ テーブル構造としてはシンプルなidだけを持ったUsersテーブルとPostsテーブルで、中間テーブルとしてUserPostsがあるとします。また、このようなデータが入っているとします
2
2
  ```bash
3
3
  mysql> select * from user_posts;
4
4
  +----+---------+---------+---------------------+---------------------+
@@ -11,9 +11,25 @@
11
11
  | 5 | 2 | 3 | 2021-04-22 09:11:59 | 2021-04-22 09:11:59 |
12
12
  | 6 | 3 | 3 | 2021-04-22 09:11:59 | 2021-04-22 09:11:59 |
13
13
  +----+---------+---------+------------+---------------------+---------------------+
14
+
15
+ mysql> select * from posts;
16
+ +----+---------------------+---------------------+
17
+ | id | created_at | updated_at |
18
+ +----+---------------------+---------------------+
19
+ | 1 | 2021-04-22 09:11:59 | 2021-04-22 09:11:59 |
20
+ | 2 | 2021-04-22 09:11:59 | 2021-04-22 09:11:59 |
21
+ | 3 | 2021-04-22 09:11:59 | 2021-04-22 09:11:59 |
22
+ +----+---------------------+---------------------+
23
+
24
+ mysql> select * from users;
25
+ +----+---------------------+---------------------+
26
+ | id | created_at | updated_at |
27
+ +----+---------------------+---------------------+
28
+ | 1 | 2021-04-22 09:11:59 | 2021-04-22 09:11:59 |
29
+ | 2 | 2021-04-22 09:11:59 | 2021-04-22 09:11:59 |
30
+ | 3 | 2021-04-22 09:11:59 | 2021-04-22 09:11:59 |
31
+ +----+---------------------+---------------------+
14
32
  ```
15
- また、Postsテーブルにはid=1,2,3のレコードが存在するとします。
16
-
17
33
  上記の条件のもと、user_idが2のpostを除いたposts一覧を取得したい(上記の条件だとPostID=1のものだけが帰ってきて欲しい)のですがいい方法が思い付かず、もしわかる方がいらっしゃいましたら教えていただきたいです。
18
34
 
19
35
  ### 追記

1

Tweak

2021/04/22 10:47

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -14,4 +14,9 @@
14
14
  ```
15
15
  また、Postsテーブルにはid=1,2,3のレコードが存在するとします。
16
16
 
17
- 上記の条件のもと、user_idが2のpostを除いたuser_posts一覧を取得したい(上記の条件だとPostID=1のものだけが帰ってきて欲しい)のですがいい方法が思い付かず、もしわかる方がいらっしゃいましたら教えていただきたいです。
17
+ 上記の条件のもと、user_idが2のpostを除いたposts一覧を取得したい(上記の条件だとPostID=1のものだけが帰ってきて欲しい)のですがいい方法が思い付かず、もしわかる方がいらっしゃいましたら教えていただきたいです。
18
+
19
+ ### 追記
20
+ 当初 `select * from posts inner join user_posts on posts.id = user_posts.post_id where not user_posts.user_id = 2;`というクエリで取得できると思っていたのですが、これだと以下のような問題点があり意図したものが取得できませんでした
21
+ - user_id=1, post_id=2の場合やuser_id=3, post_id=3の場合がすり抜けてしまう(postID=2, 3はuser_id=2が持ってるPostIDなので除外したい)
22
+ - user_id=1, post_id=3やuser_id=3, post_id=3のものは同じpost_idなので重複しないようにしたい