AR ホームベーカリー

オイラのアウトプット用ホームベーカリー!

カラム内に存在しない値を抽出する

具体的には以下のような 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 で比較したりしていました。

teratail.com

あーなるほど、 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 あたりがいいのかあ、と悩んでそのまま来ているのでそろそろなんとかしたい。