質問編集履歴
1
説明の追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -48,13 +48,17 @@
|
|
48
48
|
|
49
49
|
## やりたいこと
|
50
50
|
|
51
|
+
item_informaitonsテーブルのitem_idが重複しているレコード、新規のレコードを別々に取得したい。
|
52
|
+
|
53
|
+
重複しているレコード(id: 1,2)のうち、最初のレコード(id: 1)は新規として扱いたい。
|
54
|
+
|
55
|
+
|
56
|
+
|
57
|
+
以下の様な感じです。
|
58
|
+
|
51
59
|
> 新規 = item_informationsの(id: 1,3,4)のレコード
|
52
60
|
|
53
61
|
> 重複 = item_informationsの(id: 2)のレコード
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
のように、新規のレコード、重複しているレコードを別々に取得したい
|
58
62
|
|
59
63
|
|
60
64
|
|
@@ -76,7 +80,23 @@
|
|
76
80
|
|
77
81
|
```
|
78
82
|
|
83
|
+
以下のレコードが取得できています。
|
84
|
+
|
85
|
+
| id | item_id |
|
86
|
+
|
87
|
+
| -- | ------- |
|
88
|
+
|
89
|
+
| 1 | 10 |
|
90
|
+
|
91
|
+
| 3 | 11 |
|
92
|
+
|
93
|
+
| 4 | 12 |
|
94
|
+
|
95
|
+
|
96
|
+
|
97
|
+
|
98
|
+
|
79
|
-
重複のレコード
|
99
|
+
重複のレコードをクエリを使用して取得しようとして問題が発生しました。
|
80
100
|
|
81
101
|
|
82
102
|
|
@@ -102,50 +122,54 @@
|
|
102
122
|
|
103
123
|
```
|
104
124
|
|
105
|
-
|
125
|
+
サブクエリでは、以下が取得できています。
|
106
126
|
|
127
|
+
| id | |
|
128
|
+
|
129
|
+
| -- | -- |
|
130
|
+
|
131
|
+
| 1 | |
|
132
|
+
|
133
|
+
| 3 | |
|
134
|
+
|
135
|
+
| 4 | |
|
136
|
+
|
137
|
+
|
138
|
+
|
139
|
+
これをサブクエリとして、NOT INで省けば取得できると考えました。
|
140
|
+
|
107
|
-
結果として
|
141
|
+
結果として何も取得されず、空の値が返ってきました。
|
108
142
|
|
109
143
|
|
110
144
|
|
111
145
|
|
112
146
|
|
113
|
-
##
|
147
|
+
## 疑問点まとめ
|
114
|
-
|
115
|
-
GROUP BYは重複をまとめるだけで、まとめられたデータ自体は残っている?
|
116
|
-
|
117
|
-
だからそのままNOT INで省こうとしたら全てのレコードが省かれたのではないか?
|
118
148
|
|
119
149
|
|
120
150
|
|
121
|
-
|
122
|
-
|
123
|
-
|
151
|
+
知りたいことは、**問題があったクエリでは、なぜデータの取得ができなかったのか**です。
|
124
152
|
|
125
153
|
|
126
154
|
|
127
|
-
|
155
|
+
憶測ですが、
|
128
156
|
|
129
|
-
|
157
|
+
**GROUP BYは重複をまとめるもの。**
|
130
158
|
|
131
|
-
|
159
|
+
**省いているわけではないので、見えなくても(id: 2)のレコードも含まれている?**
|
160
|
+
|
161
|
+
**だからそのままNOT INで省こうとしたら全てのレコードが省かれたのではないか?**
|
162
|
+
|
163
|
+
と考えています。
|
132
164
|
|
133
165
|
|
134
166
|
|
135
|
-
# where.not(カラム名: 指定する値(配列も可能))とすることで、
|
136
|
-
|
137
|
-
|
167
|
+
ちなみに、重複のデータ取得に関しては、SQLを使用しない形で解決しております。
|
138
|
-
|
139
|
-
```
|
140
|
-
|
141
|
-
しかし、
|
142
168
|
|
143
169
|
|
144
170
|
|
145
|
-
|
171
|
+
解決はしているのですが、理由がわからないままだと今後も同じことをしてしまうと思ったので理由を調べています。
|
146
|
-
|
147
|
-
|
148
172
|
|
149
173
|
いろいろ調べたのですがこれと言った答えが見つかりませんでした。
|
150
174
|
|
151
|
-
初心者の憶測で終わらせてしまうのは心許ないので、回答していただけると幸いです。
|
175
|
+
初心者の憶測で終わらせてしまうのは心許ないので、理由が分かるかたがいれば回答していただけると幸いです。
|