いつもお世話になっております。
今回は自分で書いたSQLがどうも冗長に見えるので皆様のご助力をいただきたいなと思って質問させていただきました。
やりたいことは以下となります。
以下のテーブルから、カラムBが100の物を取得
ただし、カラムBが100でないレコードが存在した場合はそのデータは取得しない
(日本語がわかりにくくてすみません)
カラムA | カラムB |
---|---|
1 | 100 |
2 | 100 |
2 | 200 |
3 | 100 |
4 | 100 |
5 | 100 |
上記の例だと カラムA の「2」は 100 と 200 を持っているので取得したくありません。
想定取得結果は以下です。
カラムA | カラムB |
---|---|
1 | 100 |
3 | 100 |
4 | 100 |
5 | 100 |
これを自分で書いてみると以下のようになりました。
MySQL
1SELECT * FROM 'テーブル' where 'カラムB' = 100 AND 'カラムA' not in ( 2 SELECT 'カラムA' FROM 'テーブル' where 'カラムB' <> 100 AND 'カラムA' in ( 3 SELECT 'カラムA' FROM 'テーブル' where 'カラムB' = 100) 4 )
上記のSQLでも問題なく結果は取得できたのですが、めちゃめちゃ冗長な気がしてます。
もっとコンパクトに書く方法はあるのでしょうか。
お時間ある方よろしければご教示を宜しくお願い致します。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。