質問編集履歴

3

Tweak

2021/04/22 10:49

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -62,7 +62,7 @@
62
62
 
63
63
  ```
64
64
 
65
- 上記の条件のもと、user_idが2のpostを除いたposts一覧を取得したい(上記の条件だとPostID=1のものだけが帰ってきて欲しい)のですがいい方法が思い付かず、もしわかる方がいらっしゃいましたら教えていただきたいです。
65
+ 上記の条件のもと、user_posts.user_idが2のpostを除いたposts一覧を取得したい(上記の条件だとPostID=1のものだけが帰ってきて欲しい)のですがいい方法が思い付かず、もしわかる方がいらっしゃいましたら教えていただきたいです。
66
66
 
67
67
 
68
68
 

2

Tweak

2021/04/22 10:49

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,4 @@
1
- このようなデータが入っているとします
1
+ テーブル構造としてはシンプルなidだけを持ったUsersテーブルとPostsテーブルで、中間テーブルとしてUserPostsがあるとします。また、このようなデータが入っているとします
2
2
 
3
3
  ```bash
4
4
 
@@ -24,11 +24,43 @@
24
24
 
25
25
  +----+---------+---------+------------+---------------------+---------------------+
26
26
 
27
- ```
28
-
29
- また、Postsテーブルにはid=1,2,3のレコードが存在するとします。
30
27
 
31
28
 
29
+ mysql> select * from posts;
30
+
31
+ +----+---------------------+---------------------+
32
+
33
+ | id | created_at | updated_at |
34
+
35
+ +----+---------------------+---------------------+
36
+
37
+ | 1 | 2021-04-22 09:11:59 | 2021-04-22 09:11:59 |
38
+
39
+ | 2 | 2021-04-22 09:11:59 | 2021-04-22 09:11:59 |
40
+
41
+ | 3 | 2021-04-22 09:11:59 | 2021-04-22 09:11:59 |
42
+
43
+ +----+---------------------+---------------------+
44
+
45
+
46
+
47
+ mysql> select * from users;
48
+
49
+ +----+---------------------+---------------------+
50
+
51
+ | id | created_at | updated_at |
52
+
53
+ +----+---------------------+---------------------+
54
+
55
+ | 1 | 2021-04-22 09:11:59 | 2021-04-22 09:11:59 |
56
+
57
+ | 2 | 2021-04-22 09:11:59 | 2021-04-22 09:11:59 |
58
+
59
+ | 3 | 2021-04-22 09:11:59 | 2021-04-22 09:11:59 |
60
+
61
+ +----+---------------------+---------------------+
62
+
63
+ ```
32
64
 
33
65
  上記の条件のもと、user_idが2のpostを除いたposts一覧を取得したい(上記の条件だとPostID=1のものだけが帰ってきて欲しい)のですがいい方法が思い付かず、もしわかる方がいらっしゃいましたら教えていただきたいです。
34
66
 

1

Tweak

2021/04/22 10:47

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -30,4 +30,14 @@
30
30
 
31
31
 
32
32
 
33
- 上記の条件のもと、user_idが2のpostを除いたuser_posts一覧を取得したい(上記の条件だとPostID=1のものだけが帰ってきて欲しい)のですがいい方法が思い付かず、もしわかる方がいらっしゃいましたら教えていただきたいです。
33
+ 上記の条件のもと、user_idが2のpostを除いたposts一覧を取得したい(上記の条件だとPostID=1のものだけが帰ってきて欲しい)のですがいい方法が思い付かず、もしわかる方がいらっしゃいましたら教えていただきたいです。
34
+
35
+
36
+
37
+ ### 追記
38
+
39
+ 当初 `select * from posts inner join user_posts on posts.id = user_posts.post_id where not user_posts.user_id = 2;`というクエリで取得できると思っていたのですが、これだと以下のような問題点があり意図したものが取得できませんでした
40
+
41
+ - user_id=1, post_id=2の場合やuser_id=3, post_id=3の場合がすり抜けてしまう(postID=2, 3はuser_id=2が持ってるPostIDなので除外したい)
42
+
43
+ - user_id=1, post_id=3やuser_id=3, post_id=3のものは同じpost_idなので重複しないようにしたい