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

質問編集履歴

1

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

2018/10/10 16:53

投稿

teityura
teityura

スコア84

title CHANGED
File without changes
body CHANGED
@@ -41,4 +41,87 @@
41
41
  | 3625729 | 439715 | /* ★ */
42
42
  | notfoud | 562133 |
43
43
  +---------+----------+
44
+ ```
45
+
46
+ ↑の条件は解決できましたが、テーブル2つを参照する場合などはどうすればよいでしょうか。
47
+ テーブルが2つあり、
48
+ JOINするか副問い合わせするかして、
49
+ username in ('A', 'D', 'E', 'X', 'Y') という条件に絞った上で、
50
+ loginname を ('AA', 'DD', 'EE', 'notfound', 'notfound') と表示させたいのです。
51
+
52
+ ```MySQL
53
+ /* login TABLE */
54
+ +--------+---------+-----------+
55
+ | id | user_id | loginname |
56
+ +--------+---------+-----------+
57
+ | 21 | 1 | AA |
58
+ | 22 | 2 | BB | /* ★ */
59
+ | 23 | 3 | CC |
60
+ | 24 | 4 | DD | /* ★ */
61
+ | 25 | 5 | EE | /* ★ */
62
+ | 26 | 6 | FF |
63
+ +--------+---------+--------+
64
+
65
+ /* user TABLE */
66
+ +---------+----------+
67
+ | id | username |
68
+ +---------+----------+
69
+ | 1 | A |
70
+ | 2 | B | /* ★ */
71
+ | 3 | C |
72
+ | 4 | D | /* ★ */
73
+ | 5 | E | /* ★ */
74
+ | 6 | F |
75
+ +---------+----------+
76
+
77
+ /* usernameが'X', 'Y'のレコードが該当しない */
78
+ SELECT
79
+ u.loginname
80
+ FROM
81
+ login AS l
82
+ LEFT JOIN
83
+ user AS u ON u.id = l.user_id
84
+ WHERE
85
+ username in ('A', 'D', 'E', 'X', 'Y') ;
86
+ +-----------+
87
+ | loginname |
88
+ +-----------+
89
+ | AA |
90
+ | DD |
91
+ | EE |
92
+ +-----------+
93
+
94
+ /* 下記のようなクエリで、'B','C','F'を出さず、'X','Y'も表示したい */
95
+ /* 案1 */
96
+ SELECT
97
+ CASE
98
+ WHEN u.loginname IS NULL THEN 'notfound'
99
+ ELSE u.loginname
100
+ END
101
+ FROM
102
+ login AS l
103
+ LEFT JOIN
104
+ user AS u ON u.id = l.user_id
105
+ WHERE
106
+ username in ('A', 'D', 'E', 'X', 'Y') ;
107
+ +-----------+
108
+ | loginname |
109
+ +-----------+
110
+ | AA |
111
+ | DD |
112
+ | EE |
113
+ | notfound |
114
+ | notfound |
115
+ +-----------+
116
+
117
+ /* 案2 */
118
+ SELECT
119
+ CASE
120
+ WHEN loginname IS NULL THEN 'notfound'
121
+ ELSE loginname
122
+ END
123
+ FROM
124
+ login
125
+ WHERE
126
+ user_id in (select id from user where username in ('A', 'D', 'E', 'X', 'Y')) ;
44
127
  ```