【LeetCode】196. Delete Duplicate Emails 6日目

どーも!

たかぽんです!

今回はDelete Duplicate Emailsという問題を行ってみました!

時初めて気づきましたが、これSQLの問題でした...w

みていきましょう!

Delete Duplicate Emails

さて、今回の問題は以下です。

簡単にご説明すると...

DBにidは異なるけど、入っているデータが全く同じ値になってしまっている場合があり、そういった被り項目がある場合、idが若い番号のものだけ残すようにdeleteします。

つまり、重複するカラムは消してしまえ!と言うわけです。

アルゴリズム

では、アルゴリズムを考えてみます...

行えばいいのはdelete作業ではあるんですが...

思ったよりも時間がかかりました...

最初は一つのテーブルでなんとかかんとかしようとしていたのですが、思いつかず...

最終的には同じテーブルを複製して利用する形になりました。

僕の場合の考え方としては、同じテーブル同士で比較を行い、値が等しく、なおかつidが古いカラムを消してあげる...というものです。

これに関しては聞くよりみた方がわかりやすそうなので、次節でみていただければと思います。

提出したコード

では、最後に僕が提出したコードを貼っておきます。

Runtime: 1689 ms, faster than 50.93% of MySQL online submissions for Delete Duplicate Emails.
Memory Usage: 0B, less than 100.00% of MySQL online submissions for Delete Duplicate Emails.

INNER JOINを使用することによって、自分自身の複製を条件として使えるようにしています。

そして、p1, p2でEmailが等しく、なおかつidが大きいもの...をdeleteの対象にしているわけですね。

# Write your MySQL query statement below
Delete p1 FROM Person p1 INNER JOIN Person p2
Where p1.Email=p2.Email and p1.Id > p2.Id

日付が変わってしまいましたが...

本日はここまで!

それでわ!

おすすめの記事