データベースにPostgreSQLを使っていて、カラム名に別名をつけた方がわかりやすいと感じる機会がありました。
例えば、
SELECT no FROM table1;
のnoのままでは、プログラム上意味が分かりにくいと感じました。
プログラムとしては、noカラムの値を、membershipNumberと名付けた変数で扱っています。
そのため、代入先の変数だけでなく、読み取るときも、membershipNumberの方がわかりやすい、と思いました。
思った通りにするために、ASで別名をつけて、以下のようにしました。
SELECT no AS membershipNumber FROM table1;
このようにして、プログラムを動作させたところ、membershipNumberの値がnullになっています。
noカラムには値があるのに、なぜかnullです。
なぜnullになるのか、わけがわからず、タイプミスをしているわけでもなく、悩みました。
SQLを実行できるツールで実行して結果を見て、思った通りにデータが取得できているのになぜだ?、と悩みながら、SQLの実行結果を見ていたら、結果のカラム名が全部英小文字になっていることに気がつきました。
Photo by Caspar Camille Rubin on Unsplash
プログラム上のSQLを
SELECT no AS membershipnumber FROM table1;
に直し、カラム名を扱う箇所を直したところ、nullではなく、データベース上の値が取得できるようになりました。
自動でカラム名の英大文字を英小文字にしてしまう、という点を忘れて、英大文字を使ったために起きた現象でした。
最終的には
SELECT no AS membership_number FROM table1;
としました。
思い込みのために、20分ほど時間を費やしてしまいました。