より良いエンジニアを目指して

1日1つ。良くなる!上手くなる!

久しぶりにSQL 書いたら、内部結合すら忘れていた

久しぶりにシステム改修で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;

とすれば良いと。

ここまで書いてみれば、そりゃ当然だと思いはするものの、いざやろうとすると初歩的なことも忘れるものだなと痛感した次第でした。

サンプルコードのようにカラムが少ないテーブルだったらすぐわかるものですが、改修で初めて見るのに比べてカラムが多くて見通しが悪い、かつ英語のエラーだとつまづいてしまいますね。

便利なサービスがあります。

www.db-fiddle.com

f:id:rimever:20200503154934p:plain
左にテーブル定義とデータ投入、右にクエリを書いて上部よりRunで実行

参考記事