Yuki's Tech Blog

仕事で得た知見や勉強した技術を書きます。

leet codeのSQL問題を1日1題解く【1378. Replace Employee ID With The Unique Identifier】

目次

初めに

今日もSQLの問題を解いて行きます。

問題

leetcode.com

セットアップ

以下のSQL文をローカル環境で実行します。

Create table If Not Exists Employees (id int, name varchar(20));
Create table If Not Exists EmployeeUNI (id int, unique_id int);
Truncate table Employees;
insert into Employees (id, name) values ('1', 'Alice');
insert into Employees (id, name) values ('7', 'Bob');
insert into Employees (id, name) values ('11', 'Meir');
insert into Employees (id, name) values ('90', 'Winston');
insert into Employees (id, name) values ('3', 'Jonathan');
Truncate table EmployeeUNI;
insert into EmployeeUNI (id, unique_id) values ('3', '1');
insert into EmployeeUNI (id, unique_id) values ('11', '2');
insert into EmployeeUNI (id, unique_id) values ('90', '3');

知らなかった or 理解があやふやな知識

結合について

結合に関しては、以下の記事でまとめています。

yukihaga.hatenablog.com

解答

以下のSQL文を実行することで、画像のような結果を取得できます。

SELECT *
FROM Employees
LEFT OUTER JOIN EmployeeUNI
ON Employees.id = EmployeeUNI.id 

Image from Gyazo

左外部結合を使っているので、メインで指定したテーブルの内容は全て表示して、結合条件に一致するようなレコードが結合先のテーブルに存在しない場合、NULLが入ったレコードが結合されます。そのことが実行結果から確認できました。

以下のSQL文を実行したら、無事クリアできました。

SELECT UNI.unique_id, E.name
FROM Employees AS E
LEFT OUTER JOIN EmployeeUNI AS UNI
ON E.id = UNI.id

終わり

明日もやります!

参考記事