質問編集履歴

1

テーブルを2つ見なければならない場合の条件を追加

2018/10/10 16:53

投稿

teityura
teityura

スコア84

test CHANGED
File without changes
test CHANGED
@@ -85,3 +85,169 @@
85
85
  +---------+----------+
86
86
 
87
87
  ```
88
+
89
+
90
+
91
+ ↑の条件は解決できましたが、テーブル2つを参照する場合などはどうすればよいでしょうか。
92
+
93
+ テーブルが2つあり、
94
+
95
+ JOINするか副問い合わせするかして、
96
+
97
+ username in ('A', 'D', 'E', 'X', 'Y') という条件に絞った上で、
98
+
99
+ loginname を ('AA', 'DD', 'EE', 'notfound', 'notfound') と表示させたいのです。
100
+
101
+
102
+
103
+ ```MySQL
104
+
105
+ /* login TABLE */
106
+
107
+ +--------+---------+-----------+
108
+
109
+ | id | user_id | loginname |
110
+
111
+ +--------+---------+-----------+
112
+
113
+ | 21 | 1 | AA |
114
+
115
+ | 22 | 2 | BB | /* ★ */
116
+
117
+ | 23 | 3 | CC |
118
+
119
+ | 24 | 4 | DD | /* ★ */
120
+
121
+ | 25 | 5 | EE | /* ★ */
122
+
123
+ | 26 | 6 | FF |
124
+
125
+ +--------+---------+--------+
126
+
127
+
128
+
129
+ /* user TABLE */
130
+
131
+ +---------+----------+
132
+
133
+ | id | username |
134
+
135
+ +---------+----------+
136
+
137
+ | 1 | A |
138
+
139
+ | 2 | B | /* ★ */
140
+
141
+ | 3 | C |
142
+
143
+ | 4 | D | /* ★ */
144
+
145
+ | 5 | E | /* ★ */
146
+
147
+ | 6 | F |
148
+
149
+ +---------+----------+
150
+
151
+
152
+
153
+ /* usernameが'X', 'Y'のレコードが該当しない */
154
+
155
+ SELECT
156
+
157
+ u.loginname
158
+
159
+ FROM
160
+
161
+ login AS l
162
+
163
+ LEFT JOIN
164
+
165
+ user AS u ON u.id = l.user_id
166
+
167
+ WHERE
168
+
169
+ username in ('A', 'D', 'E', 'X', 'Y') ;
170
+
171
+ +-----------+
172
+
173
+ | loginname |
174
+
175
+ +-----------+
176
+
177
+ | AA |
178
+
179
+ | DD |
180
+
181
+ | EE |
182
+
183
+ +-----------+
184
+
185
+
186
+
187
+ /* 下記のようなクエリで、'B','C','F'を出さず、'X','Y'も表示したい */
188
+
189
+ /* 案1 */
190
+
191
+ SELECT
192
+
193
+ CASE
194
+
195
+ WHEN u.loginname IS NULL THEN 'notfound'
196
+
197
+ ELSE u.loginname
198
+
199
+ END
200
+
201
+ FROM
202
+
203
+ login AS l
204
+
205
+ LEFT JOIN
206
+
207
+ user AS u ON u.id = l.user_id
208
+
209
+ WHERE
210
+
211
+ username in ('A', 'D', 'E', 'X', 'Y') ;
212
+
213
+ +-----------+
214
+
215
+ | loginname |
216
+
217
+ +-----------+
218
+
219
+ | AA |
220
+
221
+ | DD |
222
+
223
+ | EE |
224
+
225
+ | notfound |
226
+
227
+ | notfound |
228
+
229
+ +-----------+
230
+
231
+
232
+
233
+ /* 案2 */
234
+
235
+ SELECT
236
+
237
+ CASE
238
+
239
+ WHEN loginname IS NULL THEN 'notfound'
240
+
241
+ ELSE loginname
242
+
243
+ END
244
+
245
+ FROM
246
+
247
+ login
248
+
249
+ WHERE
250
+
251
+ user_id in (select id from user where username in ('A', 'D', 'E', 'X', 'Y')) ;
252
+
253
+ ```