具体的には以下のような payments テーブルで、 year
2019 が存在するのに 2020 が存在しない user_id を特定したい。
payments
id | user_id | year | price |
---|---|---|---|
1 | 100 | 2018 | 1000 |
2 | 103 | 2019 | 1500 |
3 | 101 | 2020 | 2000 |
4 | 100 | 2020 | 3000 |
5 | 103 | 2021 | 3000 |
6 | 100 | 2019 | 1499 |
どうする
year
列で判断すりゃいいんだろうけど、そも IS NULL
じゃないしどうやって判断するんだ……? と思って、 year = 2019
year = 2020
で取得した結果を Excel で比較したりしていました。
あーなるほど、 NOT IN
使えば良いのかという顔に。 SQL をちゃんと使いこなせていない系でしたワ。
SELECT user_id FROM payments WHERE year = 2019 AND user_id NOT IN (SELECT user_id FROM payments WHERE year = 2020); #=> 結果 | user_id | |---------| | 103 |
という感じですね。 year
を 2019 で絞り込んだ結果から、2020 で絞り込んだ結果を消し込むと目的の差分が出てくるじゃろという至極当然の話でした。
SQL、応用力がないので一度入門しなおしたほうがいいなあ、と思い続けているんだけど入門 SQL とかわかりみ SQL あたりがいいのかあ、と悩んでそのまま来ているのでそろそろなんとかしたい。