質問編集履歴
3
Tweak
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
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
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を除いた
|
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なので重複しないようにしたい
|