2つのテーブルを結合して、データを取得している部分がありました。
以下のようなクエリで取得していました。
SELECT table1.mail, teble2.data1, * FROM table1 LEFT OUTER JOIN teble2 ON table1.id = table2.id
きっかけ
仕様追加で、3つのテーブルを結合して、データを取得しなければならなくなり、以下のように修正しました。SELECT table1.mail, teble2.data1, teble3.mail AS test_mail, * FROM table1 LEFT OUTER JOIN teble2 ON table1.id = table2.id LEFT OUTER JOIN teble3 ON table1.id = table3.id
プログラムからmailカラムとtest_mailカラムのデータを利用したら、mailカラムのデータが想定外のデータになっていて、想定とは異なる結果になっていました。
原因を考える
なぜなんだろうと考えてみたところ、クエリに*があるため、table1のmailカラムのデータを取得しているつもりが、table3のmailカラムのデータを取得しているのではないかと気づきました。気づきを反映してクエリを
SELECT table1.mail, teble2.data1, teble3.mail AS test_mail FROM table1 LEFT OUTER JOIN teble2 ON table1.id = table2.id LEFT OUTER JOIN teble3 ON table1.id = table3.id
としたところ、想定通りのデータになって、プログラムの処理は想定した結果になりました。
テストでクエリを書いたときに、*を使ってデータを確認して、そのままプログラムに反映していたのが、今回の事象を引き起こしていました。