久しぶりにシステム改修でDBに手を入れることになりました。
そこでSQLを書いていたら、単純な内部結合すら忘れてました。
で、私が単純につまづいたエラーは
CREATE TABLE gender( id INT, name TEXT ); CREATE TABLE person ( id INT, name TEXT, gender_id INT ); INSERT INTO gender (id,name) VALUES (1,'male'); INSERT INTO gender (id,name) VALUES (2,'female'); INSERT INTO person (id,name,gender_id) VALUES (1,'Taro Tanaka',1); INSERT INTO person (id,name,gender_id) VALUES (2,'Hanako Suzuki',2);
これに対して、こんなSQLを書いた時
SELECT name FROM person INNER JOIN gender ON person.gender_id = gender.id;
Column 'name' in field list is ambiguous
ambiguousというのは曖昧と言う意味です。
personとgenderのテーブルを内部結合したものの、どちらもnameカラムを持つために、どちらのテーブルのname列を表示すればいいのかわからんということです。
SELECT person.name,gender.name FROM person INNER JOIN gender ON person.gender_id = gender.id;
とすれば良いと。
ここまで書いてみれば、そりゃ当然だと思いはするものの、いざやろうとすると初歩的なことも忘れるものだなと痛感した次第でした。
サンプルコードのようにカラムが少ないテーブルだったらすぐわかるものですが、改修で初めて見るのに比べてカラムが多くて見通しが悪い、かつ英語のエラーだとつまづいてしまいますね。
便利なサービスがあります。